home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / echoHIRES.s < prev    next >
Encoding:
Text File  |  1996-07-02  |  218.0 KB  |  14,892 lines

  1.  
  2. CHEESEY equ 0
  3.  
  4. *************************************************
  5. * Stuff to do to get a C2P version:
  6. * Change copperlist
  7. * Change wall drawing
  8. * change floor drawing
  9. * change object drawing
  10. * change polygon drawing (ugh)
  11. * Write a palette generator program in AMOS
  12. * to provide a good 256 colour palette and
  13. * convert all graphics files specified
  14. * (possibly included in the game linker
  15. * program).
  16. * Possibly change the wall/floor/object
  17. * palettes to look nicer with more shades.
  18. * RE-implement stippling (if not present)
  19. * as it will look gorgeous now.
  20. *************************************************
  21.  
  22. ;MIDDLEX set 96
  23. ;RIGHTX set 191
  24. ;BOTTOMY set 160 
  25.  
  26. ;MIDDLEX set 96
  27. ;RIGHTX set 191
  28. ;BOTTOMY set 160
  29.  
  30. _break    macro
  31. ;    bkpt    \1
  32.     endm
  33.  
  34.  
  35. FILTER    macro
  36. ;    move.l    d0,-(sp)
  37. ;    move.l    #65000,d0
  38. ;.loop\@
  39. ;    bchg    #1,$bfe001
  40. ;    dbra    d0,.loop\@
  41. ;    move.l    (sp)+,d0
  42.     endm
  43.  
  44. BLACK    macro
  45.     move.w    #0,$dff180
  46.     endm
  47.  
  48. RED    macro
  49.     move.w    #$f00,$dff180
  50.     endm
  51.  
  52. FLASHER macro
  53. ;    movem.l    d1,-(sp)
  54. ;    move.w    #-1,d1
  55. ;
  56. ;loop3\@
  57. ;;    move.w    #\1,$dff180
  58. ;    nop
  59. ;    nop
  60. ;    move.w    #\2,$dff180
  61. ;    nop
  62. ;    nop
  63. ;    dbra    d1,loop3\@
  64.  
  65. ;    movem.l    (sp)+,d1
  66.  
  67.     endm
  68.  
  69. GREEN    macro
  70.     move.w    #$0f0,$dff180
  71.     endm
  72.  
  73. BLUE    macro
  74.     move.w    #$f,$dff180
  75.     endm
  76.  
  77. DataCacheOff macro
  78.     movem.l    a0-a6/d0-d7,-(sp)
  79.     move.l    4.w,a6
  80.     moveq    #0,d0
  81.     move.l    #%0000000100000000,d1
  82.     jsr    _LVOCacheControl(a6)
  83.     movem.l    (sp)+,a0-a6/d0-d7
  84.     endm
  85.  
  86. DataCacheOn macro
  87.     movem.l    a0-a6/d0-d7,-(sp)
  88.     move.l    4.w,a6
  89.     moveq    #-1,d0
  90.     move.l    #%0000000100000000,d1
  91.     jsr    _LVOCacheControl(a6)
  92.     movem.l    (sp)+,a0-a6/d0-d7
  93.     endm
  94.  
  95.     opt    P=68020
  96.  
  97.     include utils:sysinc/hardware/intbits.i
  98.  
  99. CD32VER equ 0
  100.  
  101. maxscrdiv EQU 8
  102. max3ddiv EQU 5
  103. playerheight EQU 12*1024
  104. playercrouched EQU 8*1024
  105. scrheight EQU 80
  106.  
  107. ; k/j/m
  108.  
  109. ; 4/8
  110. ; s/x
  111. ; b/n
  112.  
  113. midoffset EQU 104*4*40
  114.  
  115.  
  116.  SECTION Scrn,CODE
  117. OpenLib       equ -552
  118. CloseLib      equ -414
  119.  
  120. INTREQ        equ    $09C
  121. INTENA        equ    $09A
  122. INTENAR    equ    $01C
  123. DMACON        equ    $096
  124.  
  125. SERPER        equ    $032
  126. SERDATR    equ    $018
  127. SERDAT        equ    $030
  128. vhposr        equ $006    
  129. vhposrl    equ $007 
  130.  
  131. bltcon0    equ $40 
  132. bltcon1    equ $42
  133. bltcpt        equ $48
  134. bltbpt        equ $4c
  135. bltapt        equ $50
  136. spr0ctl    equ $142
  137. spr1ctl    equ $14a
  138. spr2ctl    equ $152
  139. spr3ctl    equ $15a
  140. spr4ctl    equ $162
  141. spr5ctl    equ $16a
  142. spr6ctl    equ $172
  143. spr7ctl    equ $17a
  144. spr0pos    equ $140
  145. spr1pos    equ $148
  146. spr2pos    equ $150
  147. spr3pos    equ $158
  148. spr4pos    equ $160
  149. spr5pos    equ $168
  150. spr6pos    equ $170
  151. spr7pos    equ $178
  152. bltdpt         equ $54
  153. bltafwm    equ $44
  154. bltalwm    equ $46
  155. bltsize         equ $58
  156. bltcmod         equ $60
  157. bltbmod         equ $62
  158. bltamod         equ $64
  159. bltdmod         equ $66
  160. diwstart        equ $8e         ; Screen hardware registers.
  161. diwstop         equ $90
  162. ddfstart        equ $92
  163. ddfstop         equ $94
  164. bplcon0         equ $100
  165. bplcon1         equ $102
  166. col0            equ $180
  167. col1            equ $182
  168. col2        equ $184
  169. col3        equ $186
  170. col4        equ $188
  171. col5        equ $18a
  172. col6        equ $18c
  173. col7        equ $18e
  174. col8            equ $190
  175. col9            equ $192
  176. col10           equ $194
  177. col11           equ $196
  178. col12           equ $198
  179. col13           equ $19a
  180. dmacon        equ $96
  181. dmaconr        equ $002
  182. intenar        equ $01c
  183. intena        equ $09a
  184. intreq        equ $09c
  185. intreqr        equ $01e
  186. intreqrl    equ $01f
  187. bpl1pth         equ $e0
  188. bpl1ptl         equ $e2
  189. bpl2pth        equ $e4
  190. bpl2ptl        equ $e6
  191. bpl3pth        equ $e8
  192. bpl3ptl        equ $ea
  193. bpl4pth        equ $ec
  194. bpl4ptl        equ $ee
  195. bpl5pth        equ $f0
  196. bpl5ptl        equ $f2
  197. bpl6pth        equ $f4
  198. bpl6ptl        equ $f6
  199. bpl7pth        equ $f8
  200. bpl7ptl        equ $fa
  201. bpl8pth        equ $fc
  202. bpl8ptl        equ $fe
  203. spr0pth        equ $120
  204. spr0ptl        equ $122
  205. spr1pth        equ $124
  206. spr1ptl        equ $126
  207. spr2pth        equ $128
  208. spr2ptl        equ $12a
  209. spr3pth        equ $12c
  210. spr3ptl        equ $12e
  211. spr4pth        equ $130
  212. spr4ptl        equ $132
  213. spr5pth        equ $134
  214. spr5ptl        equ $136
  215. spr6pth        equ $138
  216. spr6ptl        equ $13a
  217. spr7pth        equ $13c
  218. spr7ptl        equ $13e
  219. adkcon        equ   $09E
  220.  
  221.  
  222. ; move.l #length,d0
  223. ; moveq.l #2,d1    ; chipmem
  224. ; move.l 4.w,a6
  225. ; jsr allocmem(a6) = -198
  226.  
  227. ; tst.l d0
  228. ; beq.s ohbugger
  229. ; move.l d0,memaddr
  230.  
  231.  
  232. ; move.l 4.w,a6
  233. ; move.l memaddr,a1
  234. ; move.l #size,d0
  235. ; jsr freemem(a6) =-210
  236.  
  237.  
  238. ** This waits for the blitter to finish before allowing program
  239. ** execution to continue.
  240.  
  241.  
  242.  include "ab3:source_4000/protsetupdecode"
  243.  
  244.  
  245. SAVEREGS MACRO
  246.  movem.l d0-d7/a0-a6,-(a7)
  247.  ENDM
  248.  
  249. GETREGS MACRO
  250.  movem.l (a7)+,d0-d7/a0-a6
  251.  ENDM
  252.  
  253.  
  254. WB MACRO
  255. \@bf:
  256.  btst #6,dmaconr(a6)
  257.  bne.s \@bf
  258.  ENDM
  259.  
  260. WBa MACRO
  261. \@bf:
  262.  move.w #\2,$dff180
  263.  
  264.  btst #6,$bfe001
  265.  bne.s \@bf
  266. \@bz:
  267.  
  268.  move.w #$f0f,$dff180
  269.  
  270.  btst #6,$bfe001
  271.  beq.s \@bz
  272.  
  273.  ENDM
  274.  
  275. *Another version for when a6 <> dff000
  276.  
  277. WBSLOW MACRO
  278. \@bf:
  279.  btst #6,$dff000+dmaconr
  280.  bne.s \@bf
  281.  ENDM
  282.  
  283. WT MACRO
  284. \@bf:
  285.  btst #6,(a3)
  286.  bne.s \@bd
  287.  rts
  288. \@bd: 
  289.  btst #4,(a0)
  290.  beq.s \@bf
  291.  ENDM
  292.  
  293. WTNOT MACRO
  294. \@bf:
  295.  btst #6,(a3)
  296.  bne.s \@bd
  297.  rts
  298. \@bd: 
  299.  btst #4,(a0)
  300.  bne.s \@bf
  301.  ENDM
  302.  
  303. **
  304.  
  305.  include "ab3:source_4000/ProtectionProtection"
  306.  include "macros.i"
  307.  include "ab3:source_4000/defs.i"
  308.  
  309. ;wtclickk:
  310. ; btst #6,$bfe001
  311. ; bne.s wtclickk
  312.  
  313.  move.w (a0)+,LEVTOPLAY
  314.  
  315.  
  316.  jsr MakePatch
  317.  
  318. ;    FLASHER $0f0,$fff
  319.  
  320. ; PROTFCALC
  321. ; PROTGCALC
  322. ; PROTHCALC
  323. ; PROTICALC
  324. ; PROTKCALC
  325. ; PROTLCALC
  326. ; PROTMCALC
  327.  
  328.  
  329.  
  330.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  331.  move.w intenar(a6),_storeint
  332.  and.w #$c000,_storeint
  333.  
  334.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  335.  
  336.  
  337.  st GOURSEL
  338.  
  339.  move.l 4.w,a6
  340.  lea VBLANKInt(pc),a1
  341.  moveq #INTB_COPER,d0
  342.  jsr _LVOAddIntServer(a6)
  343.  
  344.     IFEQ CD32VER
  345.  move.l 4.w,a6
  346.  lea KEYInt(pc),a1
  347.  moveq #INTB_PORTS,d0
  348.  jsr _LVOAddIntServer(a6)
  349.     ENDC
  350.  
  351.  IFNE CD32VER
  352.  clr.b PLR1KEYS
  353.  clr.b PLR1PATH
  354.  clr.b PLR1MOUSE
  355.  st PLR1JOY
  356.  clr.b PLR2KEYS
  357.  clr.b PLR2PATH
  358.  clr.b PLR2MOUSE
  359.  st PLR2JOY
  360.  ELSE
  361.  st PLR1KEYS
  362.  clr.b PLR1PATH
  363.  clr.b PLR1MOUSE
  364.  clr.b PLR1JOY
  365.  st PLR2KEYS
  366.  clr.b PLR2PATH
  367.  clr.b PLR2MOUSE
  368.  clr.b PLR2JOY
  369.  ENDC
  370.  
  371.  PRSDO
  372.  
  373.  move.l #2,d1    
  374.  move.l #10280*2,d0
  375.  move.l 4.w,a6
  376.  jsr -198(a6)
  377.  move.l d0,TEXTSCRN
  378.  move.w d0,TSPTl
  379.  swap d0
  380.  move.w d0,TSPTh
  381.  swap d0
  382.  add.w #80,d0
  383.  move.w d0,TSPTl2
  384.  swap d0
  385.  move.w d0,TSPTh2
  386.  
  387.  move.l #nullspr,d0
  388.  move.w d0,txs0l
  389.  move.w d0,txs1l
  390.  move.w d0,txs2l
  391.  move.w d0,txs3l
  392.  move.w d0,txs4l
  393.  move.w d0,txs5l
  394.  move.w d0,txs6l
  395.  move.w d0,txs7l
  396.  swap d0
  397.  move.w d0,txs0h
  398.  move.w d0,txs1h
  399.  move.w d0,txs2h
  400.  move.w d0,txs3h
  401.  move.w d0,txs4h
  402.  move.w d0,txs5h
  403.  move.w d0,txs6h
  404.  move.w d0,txs7h 
  405.  
  406.  move.l #0,d1    
  407.  move.l #140000,d0
  408.  move.l 4.w,a6
  409.  jsr -198(a6)
  410.  move.l d0,LEVELDATA
  411.  
  412.  move.l #0,d1
  413.  
  414.  ifeq CHEESEY    
  415.  move.l #320*256,d0
  416.  endc
  417.  
  418.  ifne CHEESEY
  419.  move.l #320*160,d0
  420.  endc
  421.  
  422.  move.l 4.w,a6
  423.  jsr -198(a6)
  424.  move.l d0,FASTBUFFER
  425.  
  426.  
  427.  move.l #consttab,a0
  428.  moveq #1,d0
  429.  move.w #8191,d1
  430. fillconst:
  431.  
  432.  move.l #16384*64,d2
  433.  divs.l d0,d2
  434. ; ext.l d2    ;c#
  435.  move.l #64*64*65536,d3
  436.  divs.l d2,d3
  437. ; move.l d3,d4
  438. ; asr.l #6,d4
  439.  move.l d3,(a0)+    ;e#
  440.   
  441.  asr.l #1,d2    ; c#/2.0
  442.  sub.l #40*64,d2    ; d#
  443.  muls.l d3,d2    ; d#*e#
  444.  
  445.  asr.l #6,d2
  446.  move.l d2,(a0)+
  447.  
  448.  addq #1,d0
  449.  
  450.  dbra d1,fillconst
  451.  
  452.  jsr START
  453.  
  454.  rts
  455.  
  456. FASTBUFFER: dc.l 0
  457.  
  458. _storeint
  459.     dc.w 0
  460.  
  461. * Load level into buffers.
  462.  clr.b doanything
  463.  clr.b dosounds
  464.  
  465. ; DRAW TEXT SCREEN
  466.  
  467. TWEENTEXT:
  468.  
  469.  move.l #LEVELTEXT,a0
  470.  move.w PLOPT,d0
  471.  muls #82*16,d0
  472.  add.l d0,a0
  473.  
  474.  move.w #15,d7
  475.  move.w #0,d0
  476. DOWNTEXT:
  477.  move.l TEXTSCRN,a1
  478.  jsr DRAWLINEOFTEXT
  479.  addq #1,d0
  480.  add.w #82,a0
  481.  dbra d7,DOWNTEXT
  482.  rts
  483.  
  484. FONTADDRS:
  485.  dc.l ENDFONT0,CHARWIDTHS0
  486.  dc.l ENDFONT1,CHARWIDTHS1
  487.  dc.l ENDFONT2,CHARWIDTHS2
  488.  
  489. ENDFONT0:
  490.  incbin "endfont0"
  491. CHARWIDTHS0:
  492.  incbin "charwidths0"
  493. ENDFONT1:
  494. ; incbin "endfont1"
  495. CHARWIDTHS1:
  496. ; incbin "charwidths1"
  497. ENDFONT2:
  498. ; incbin "endfont2"
  499. CHARWIDTHS2:
  500. ; incbin "charwidths2"
  501.  
  502.  even
  503.  
  504. DRAWLINEOFTEXT:
  505.  movem.l d0/a0/d7,-(a7)
  506.  
  507.  muls #80*16,d0
  508.  add.l d0,a1    ; screen pointer
  509.  
  510.  move.l #FONTADDRS,a3
  511.  moveq #0,d0
  512.  move.b (a0)+,d0
  513.  move.l (a3,d0.w*8),a2
  514.  move.l 4(a3,d0.w*8),a3
  515.  
  516.  moveq #0,d4
  517.  
  518.  moveq #0,d1    ; width counter:
  519.  move.w #79,d6
  520.  tst.b (a0)+
  521.  beq.s NOTCENTRED
  522.  moveq #-1,d5
  523.  move.l a0,a4
  524.  moveq #0,d2
  525.  moveq #0,d3
  526.  move.w #79,d0    ; number of chars
  527. .addup:
  528.  addq #1,d5
  529.  move.b (a4)+,d2
  530.  move.b -32(a3,d2.w),d4
  531.  add.w d4,d3
  532.  cmp.b #32,d2
  533.  beq.s .DONTPUTIN
  534.  move.w d5,d6
  535.  move.w d3,d1
  536. .DONTPUTIN:
  537.  dbra d0,.addup
  538.  asr.w #1,d1
  539.  neg.w d1
  540.  add.w #320,d1    ; horiz pos of start x
  541.  
  542. NOTCENTRED:
  543.  
  544.  move.w d6,d7
  545. DOACHAR:
  546.  moveq #0,d2
  547.  move.b (a0)+,d2
  548.  sub.w #32,d2
  549.  moveq #0,d6
  550.  move.b (a3,d2.w),d6
  551.  asl.w #5,d2
  552.  lea (a2,d2.w),a4    ; char font
  553. val SET 0
  554.  REPT 16
  555.  move.w (a4)+,d0
  556.  bfins d0,val(a1){d1:d6}
  557. val SET val+80
  558.  ENDR
  559.  add.w d6,d1
  560.  dbra d7,DOACHAR
  561.  movem.l (a7)+,d0/a0/d7
  562.  rts 
  563.  
  564.  
  565. CLRTWEENSCRN:
  566.  move.l TEXTSCRN,a0
  567.  move.w #(10240/16)-1,d0
  568.  move.l #$0,d1
  569. .lll
  570.  move.l d1,(a0)+
  571.  move.l d1,(a0)+
  572.  move.l d1,(a0)+
  573.  move.l d1,(a0)+
  574.  move.l d1,(a0)+
  575.  move.l d1,(a0)+
  576.  move.l d1,(a0)+
  577.  move.l d1,(a0)+
  578.  dbra d0,.lll
  579.  rts
  580.  
  581. LEVTOPLAY: dc.w 0
  582.  
  583. COPYLINK: dc.l 0
  584.  
  585. PLAYTHEGAME:
  586.  
  587.  move.w #0,TXTCOLL
  588.  move.w #0,MIXCOLL
  589.  move.w #0,TOPCOLL
  590.  
  591.  bsr CLRTWEENSCRN
  592.  
  593.  cmp.b #'n',mors
  594.  bne.s .notext
  595.  bsr TWEENTEXT
  596. .notext
  597.  
  598. ;charlie 
  599.  move.l #TEXTCOP,$dff080
  600.  
  601.  move.w #$10,d0
  602.  move.w #7,d1
  603.  
  604. .fdup
  605.  move.w d0,TXTCOLL
  606.  move.w d0,MIXCOLL
  607.  add.w #$121,d0
  608. .wtframe:
  609.  btst #5,$dff000+intreqrl
  610.  beq.s .wtframe
  611.  move.w #$0020,$dff000+intreq
  612.  dbra d1,.fdup
  613.  
  614.  jsr INITCOPPERSCRN
  615.  
  616.  move.l #$dff000,a6
  617.  jsr SETPLAYERS
  618.  
  619.  move.l #0,TYPEOFMEM
  620.  move.l #LLname,a0
  621.  jsr LOADAFILE
  622.  move.l d0,LINKS
  623.  
  624.  move.l #0,TYPEOFMEM
  625.  move.l #LLFname,a0
  626.  jsr LOADAFILE
  627.  move.l d0,FLYLINKS
  628.  
  629. ; Get level memory.
  630.  
  631.  move.l #1,d1
  632.  move.l #40000,d0
  633.  move.l 4.w,a6
  634.  jsr -198(a6)
  635.  move.l d0,LEVELGRAPHICS
  636.  
  637.  move.l #1,d1
  638.  move.l #40000,d0
  639.  move.l 4.w,a6
  640.  jsr -198(a6)
  641.  move.l d0,LEVELCLIPS
  642.  
  643.  move.l #2,d1
  644.  move.l #70000,d0
  645.  move.l 4.w,a6
  646.  jsr -198(a6)
  647.  move.l d0,LEVELMUSIC
  648.  
  649.  move.l #$dff000,a6
  650.  
  651. ; move.b LEVTOPLAY,d0
  652. ; move.b d0,LEVA
  653. ; move.b d0,LEVB
  654. ; move.b d0,LEVC
  655. ; move.b d0,LEVD
  656. ; move.b d0,LEVE
  657.  
  658.  
  659. ; move.l #LEVELDATAD,LEVELDATA
  660. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  661. ; move.l #LEVELCLIPSD,LEVELCLIPS
  662.  
  663. ; bra noload
  664.  
  665. *********************************
  666.  
  667. ; move.l doslib,a6
  668. ; move.l #LLname,d1
  669. ; move.l #1005,d2
  670. ; jsr -30(a6)
  671. ; move.l d0,LLhandle
  672. ;
  673. ; move.l doslib,a6
  674. ; move.l d0,d1
  675. ; move.l #LINKS,d2
  676. ; move.l #10000,d3
  677. ; jsr -42(a6)
  678. ;
  679. ; move.l doslib,a6
  680. ; move.l LLhandle,d1
  681. ; jsr -36(a6)
  682.  
  683.  ********************************
  684.  
  685. ; move.l doslib,a6
  686. ; move.l #LLFname,d1
  687. ; move.l #1005,d2
  688. ; jsr -30(a6)
  689. ; move.l d0,LLhandle
  690.  
  691. ; move.l doslib,a6
  692. ; move.l d0,d1
  693. ; move.l #FLYLINKS,d2
  694. ; move.l #10000,d3
  695. ; jsr -42(a6)
  696.  
  697. ; move.l doslib,a6
  698. ; move.l LLhandle,d1
  699. ; jsr -36(a6)
  700.  
  701.  ************************
  702.  ********
  703.  
  704.  moveq #0,d1
  705.  move.b LEVA,d1
  706.  sub.b #'a',d1
  707.  lsl.w #6,d1
  708.  move.l LINKFILE,a6
  709.  add.l #LevelMusic,a6
  710.  add.l d1,a6
  711.  move.l a6,d1
  712.  
  713.  move.l doslib,a6
  714.  
  715.  move.l #1005,d2
  716.  jsr -30(a6)
  717.  move.l d0,LDhandle
  718.  
  719.  move.l doslib,a6
  720.  move.l d0,d1
  721.  move.l LEVELCLIPS,d2
  722.  move.l #40000,d3
  723.  jsr -42(a6)
  724.  
  725.  move.l doslib,a6
  726.  move.l LDhandle,d1
  727.  jsr -36(a6)
  728.  
  729. *************************************
  730.     move.l    LEVELCLIPS,d0
  731.     moveq    #0,d1
  732.     move.l LEVELMUSIC,a0
  733.     lea    WorkSpace,a1
  734.     lea    $0,a2
  735.     jsr    unLHA
  736. *************************************
  737.  
  738.  
  739.  move.l doslib,a6
  740.  move.l #LDname,d1
  741.  move.l #1005,d2
  742.  jsr -30(a6)
  743.  move.l d0,LDhandle
  744.  
  745.  move.l doslib,a6
  746.  move.l d0,d1
  747.  move.l LEVELCLIPS,d2
  748.  move.l #40000,d3
  749.  jsr -42(a6)
  750.  
  751.  move.l doslib,a6
  752.  move.l LDhandle,d1
  753.  jsr -36(a6)
  754.  
  755. *************************************
  756.     move.l    LEVELCLIPS,d0
  757.     moveq    #0,d1
  758.     move.l LEVELDATA,a0
  759.     lea    WorkSpace,a1
  760.     lea    $0,a2
  761.     jsr    unLHA
  762. *************************************
  763.  
  764. ********
  765.  
  766.  move.l doslib,a6
  767.  move.l #LGname,d1
  768.  move.l #1005,d2
  769.  jsr -30(a6)
  770.  move.l d0,LGhandle
  771.  
  772.  move.l doslib,a6
  773.  move.l d0,d1
  774.  move.l LEVELCLIPS,d2
  775.  move.l #40000,d3
  776.  jsr -42(a6)
  777.  
  778.  move.l doslib,a6
  779.  move.l LGhandle,d1
  780.  jsr -36(a6)
  781.  
  782. *************************************
  783.     move.l    LEVELCLIPS,d0
  784.     moveq    #0,d1
  785.     move.l LEVELGRAPHICS,a0
  786.     lea    WorkSpace,a1
  787.     lea    $0,a2
  788.     jsr    unLHA
  789. *************************************
  790.  
  791. ********
  792.  
  793.  move.l doslib,a6
  794.  move.l #LCname,d1
  795.  move.l #1005,d2
  796.  jsr -30(a6)
  797.  move.l d0,LChandle
  798.  
  799.  move.l doslib,a6
  800.  move.l d0,d1
  801.  move.l #WorkSpace+16384,d2
  802.  move.l #16000,d3
  803.  jsr -42(a6)
  804.  
  805.  move.l doslib,a6
  806.  move.l LChandle,d1
  807.  jsr -36(a6)
  808.  
  809. *************************************
  810.     move.l    #WorkSpace+16384,d0
  811.     moveq    #0,d1
  812.     move.l LEVELCLIPS,a0
  813.     lea    WorkSpace,a1
  814.     lea    $0,a2
  815.     jsr    unLHA
  816. *************************************
  817.  
  818.  
  819. *******
  820.  
  821. noload:
  822.  
  823. ********
  824.  
  825. ; move.l doslib,a6
  826. ; move.l #Prefsname,d1
  827. ; move.l #1005,d2
  828. ; jsr -30(a6)
  829. ; move.l d0,Prefshandle
  830.  
  831. ; move.l doslib,a6
  832. ; move.l d0,d1
  833. ; move.l #Prefsfile,d2
  834. ; move.l #50,d3
  835. ; jsr -42(a6)
  836.  
  837. ; move.l doslib,a6
  838. ; move.l Prefshandle,d1
  839. ; jsr -36(a6)
  840.  
  841. *******
  842.  
  843.  IFNE CD32VER
  844.  move.l doslib,a6
  845.  move.l #115,d1
  846.  jsr -198(a6)
  847.  ENDC
  848.  
  849.  
  850. ; move.l doslib,d0
  851. ; move.l d0,a1
  852. ; move.l 4.w,a6
  853. ; jsr CloseLib(a6)
  854.  
  855.  move.l #$dff000,a6
  856.  
  857. charlie:
  858. ; jmp  ENDGAMESCROLL
  859.  
  860.     move.w #$87c0,dmacon(a6)
  861.  
  862.     move.w    #%1000000000100000,dmacon(a6)
  863.  
  864. ; move.w intenar(a6),saveinters
  865.     
  866.     move.w #%00101111,intena(a6)
  867.  
  868.     move.w #255,adkcon(a6)
  869.  
  870.  
  871. *** Put myself in supervisor mode
  872.  
  873.  bra blag
  874. ; move.l $6c,d0
  875. ; move.l #blag,$6c
  876. ; move.w #$8010,intreq(a6)
  877.  
  878.  rts
  879.  
  880. saveit: ds.l 10
  881. doslibname: dc.b 'dos.library',0
  882.  even
  883. doslib: dc.l 0
  884.  
  885. mors: dc.w 0
  886.  
  887. LDname: dc.b 'tkg2:levels/level_'
  888. LEVA:
  889.  dc.b 'a/twolev.bin',0
  890.  even
  891. LDhandle: dc.l 0
  892. LGname: dc.b 'tkg2:levels/level_'
  893. LEVB:
  894.  dc.b 'a/twolev.graph.bin',0
  895.  even
  896. LGhandle: dc.l 0
  897. LCname: dc.b 'tkg2:levels/level_'
  898. LEVC:
  899.  dc.b 'a/twolev.clips',0
  900.  even
  901. LChandle: dc.l 0
  902. LLname: dc.b 'tkg2:levels/level_'
  903. LEVD:
  904.  dc.b 'a/twolev.map',0
  905.  even
  906. LLFname: dc.b 'tkg2:levels/level_'
  907. LEVE:
  908.  dc.b 'a/twolev.flymap',0
  909.  even
  910. LLhandle: dc.l 0
  911.  
  912.     cnop    0,4
  913.  
  914. Prefsname: dc.b 'ram:prefs',0
  915.  even
  916. Prefshandle: dc.l 0
  917.  
  918.  
  919.  even
  920.  
  921.  cnop 0,4
  922.  
  923. VBLANKInt
  924.  dc.l 0,0
  925.  dc.b NT_INTERRUPT,9
  926.  dc.l Prefsname
  927.  dc.l 0
  928.  dc.l Chan0inter
  929.  
  930.  
  931. KEYInt
  932.  dc.l 0,0
  933.  dc.b NT_INTERRUPT,127
  934.  dc.l Prefsname
  935.  dc.l 0
  936.  dc.l key_interrupt
  937.  
  938.  
  939. blag:
  940. ; move.w #$10,intreq(a6)
  941. ; move.l d0,$6c
  942. ; move.w #$7fff,intena(a6)
  943.  
  944. ; move.w #$20,$dff1dc
  945.  
  946. ; move.l 4.w,a6
  947. ; lea VBLANKInt(pc),a1
  948. ; moveq #INTB_COPER,d0
  949. ; jsr _LVOAddIntServer(a6)
  950.  
  951. ****************************
  952. * Initialize level
  953. ****************************
  954. * Poke all clip offsets into
  955. * correct bit of level data.
  956. ****************************
  957.  move.l LEVELGRAPHICS,a0
  958.  move.l 12(a0),a1
  959.  add.l a0,a1
  960.  move.l a1,ZoneGraphAdds
  961.  move.l (a0),a1
  962.  add.l a0,a1
  963.  move.l a1,DoorData
  964.  move.l 4(a0),a1
  965.  add.l a0,a1
  966.  move.l a1,LiftData
  967.  move.l 8(a0),a1
  968.  add.l a0,a1
  969.  move.l a1,SwitchData
  970.  adda.w #16,a0
  971.  move.l a0,ZoneAdds
  972.  
  973.  move.l LEVELDATA,a4
  974.  lea 160*10(a4),a1
  975.  
  976.  lea 54(a1),a2
  977.  move.l a2,CPtPos
  978.  move.w 12(a1),NumCPts
  979.  move.w 14(a1),NumLevPts
  980.  
  981.  move.l 16+6(a1),a2
  982.  add.l a4,a2
  983.  move.l a2,Points
  984.  move.w 8+6(a1),d0
  985.  lea 4(a2,d0.w*4),a2
  986.  move.l a2,PointBrights
  987.  move.w 16(a1),d0
  988.  addq #1,d0
  989.  muls #80,d0
  990.  add.l d0,a2
  991.  move.l a2,ZoneBorderPts
  992.  
  993.  move.l 20+6(a1),a2
  994.  add.l a4,a2
  995.  move.l a2,FloorLines
  996.  move.w -2(a2),ENDZONE
  997.  move.l 24+6(a1),a2
  998.  add.l a4,a2
  999.  move.l a2,ObjectData
  1000. *****************************************
  1001. * Just for charles
  1002.  
  1003. ; move.w #$6060,6(a2)
  1004. ; move.l #$d0000,8(a2)
  1005. ; sub.w #40,4(a2)
  1006. ; move.w #45*256+45,14(a2)
  1007. ****************************************
  1008.  move.l 28+6(a1),a2
  1009.  add.l a4,a2
  1010.  move.l a2,PlayerShotData
  1011.  move.l 32+6(a1),a2
  1012.  add.l a4,a2
  1013.  move.l a2,NastyShotData
  1014.  
  1015.  add.l #64*20,a2
  1016.  move.l a2,OtherNastyData
  1017.  
  1018.  move.l 36+6(a1),a2
  1019.  add.l a4,a2
  1020.  move.l a2,ObjectPoints  
  1021.  move.l 40+6(a1),a2
  1022.  add.l a4,a2
  1023.  move.l a2,PLR1_Obj
  1024.  move.l 44+6(a1),a2
  1025.  add.l a4,a2
  1026.  move.l a2,PLR2_Obj
  1027.  move.w 14+6(a1),NumObjectPoints
  1028.  
  1029. ; bra noclips
  1030.   
  1031.  move.l LEVELCLIPS,a2
  1032.  moveq #0,d0
  1033.  move.w 10+6(a1),d7    ;numzones
  1034.  move.w d7,NUMZONES
  1035. assignclips:
  1036.  move.l (a0)+,a3
  1037.  add.l a4,a3    ; pointer to a zone
  1038.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  1039. dowholezone:
  1040.  tst.w (a3)
  1041.  blt.s nomorethiszone
  1042.  tst.w 2(a3)
  1043.  blt.s thisonenull
  1044.  
  1045.  move.l d0,d1
  1046.  asr.l #1,d1
  1047.  move.w d1,2(a3)
  1048.  
  1049. findnextclip:
  1050.  cmp.w #-2,(a2,d0.l)
  1051.  beq.s foundnextclip
  1052.  addq.l #2,d0
  1053.  bra.s findnextclip
  1054. foundnextclip
  1055.  addq.l #2,d0
  1056.  
  1057. thisonenull:
  1058.  addq #8,a3 
  1059.  bra.s dowholezone
  1060. nomorethiszone:
  1061.  dbra d7,assignclips
  1062.  
  1063.  lea (a2,d0.l),a2
  1064.  move.l a2,CONNECT_TABLE
  1065.  
  1066. noclips:
  1067.  
  1068. * Put in addresses of glowything
  1069.  
  1070.  
  1071. ************************************
  1072.  
  1073. ; cmp.b #'k',Prefsfile
  1074. ; bne.s nkb
  1075.  
  1076. ;nkb:
  1077. ; cmp.b #'m',Prefsfile
  1078. ; bne.s nmc
  1079. ; clr.b PLR1KEYS
  1080. ; clr.b PLR1PATH
  1081. ; st PLR1MOUSE
  1082. ; clr.b PLR1JOY
  1083. ;nmc:
  1084. ; cmp.b #'j',Prefsfile
  1085. ; bne.s njc
  1086. ; clr.b PLR1KEYS
  1087. ; clr.b PLR1PATH
  1088. ; clr.b PLR1MOUSE
  1089. ; st PLR1JOY
  1090. ;njc:
  1091.  
  1092.  clr.b PLR1_StoodInTop
  1093.  move.l #playerheight,PLR1s_height
  1094.  
  1095.  move.l #empty,pos1LEFT
  1096.  move.l #empty,pos2LEFT
  1097.  move.l #empty,pos1RIGHT
  1098.  move.l #empty,pos2RIGHT
  1099.  move.l #empty,pos0LEFT
  1100.  move.l #empty,pos3LEFT
  1101.  move.l #empty,pos0RIGHT
  1102.  move.l #empty,pos3RIGHT
  1103.  move.l #emptyend,Samp0endLEFT
  1104.  move.l #emptyend,Samp1endLEFT
  1105.  move.l #emptyend,Samp0endRIGHT
  1106.  move.l #emptyend,Samp1endRIGHT
  1107.  move.l #emptyend,Samp2endLEFT
  1108.  move.l #emptyend,Samp3endLEFT
  1109.  move.l #emptyend,Samp2endRIGHT
  1110.  move.l #emptyend,Samp3endRIGHT
  1111.  
  1112.  
  1113.  move.l #nullline,d0
  1114.  move.w d0,n1l
  1115.  swap d0
  1116.  move.w d0,n1h
  1117.  
  1118.  move.l Panel,d0
  1119.  move.w d0,p1l
  1120.  swap d0
  1121.  move.w d0,p1h
  1122.  swap d0
  1123.  add.l #40,d0
  1124.  move.w d0,p2l
  1125.  swap d0
  1126.  move.w d0,p2h
  1127.  swap d0
  1128.  add.l #40,d0
  1129.  move.w d0,p3l
  1130.  swap d0
  1131.  move.w d0,p3h
  1132.  swap d0
  1133.  add.l #40,d0
  1134.  move.w d0,p4l
  1135.  swap d0
  1136.  move.w d0,p4h
  1137.  swap d0
  1138.  add.l #40,d0
  1139.  move.w d0,p5l
  1140.  swap d0
  1141.  move.w d0,p5h
  1142.  swap d0
  1143.  add.l #40,d0
  1144.  move.w d0,p6l
  1145.  swap d0
  1146.  move.w d0,p6h
  1147.  swap d0
  1148.  add.l #40,d0
  1149.  move.w d0,p7l
  1150.  swap d0
  1151.  move.w d0,p7h
  1152.  swap d0
  1153.  add.l #40,d0
  1154.  move.w d0,p8l
  1155.  swap d0
  1156.  move.w d0,p8h
  1157.  
  1158. *******************************
  1159. * TIMER SCREEN SETUP
  1160. ; move.l #TimerScr,d0
  1161. ; move.w d0,p1l
  1162. ; swap d0
  1163. ; move.w d0,p1h
  1164. ; move.w #$1201,Panelcon
  1165.  
  1166. ; move.l #borders,d0
  1167. ; move.w d0,s0l
  1168. ; swap d0
  1169. ; move.w d0,s0h
  1170. ; move.l #borders+2592,d0
  1171. ; move.w d0,s1l
  1172. ; swap d0
  1173. ; move.w d0,s1h
  1174. ; move.l #borders+2592*2,d0
  1175. ; move.w d0,s2l
  1176. ; swap d0
  1177. ; move.w d0,s2h
  1178. ; move.l #borders+2592*3,d0
  1179. ; move.w d0,s3l
  1180. ; swap d0
  1181. ; move.w d0,s3h
  1182.  
  1183.  move.l #nullspr,d0
  1184.  move.w d0,s0l
  1185.  move.w d0,s1l
  1186.  move.w d0,s2l
  1187.  move.w d0,s3l
  1188.  
  1189.  move.w d0,s4l
  1190.  move.w d0,s5l
  1191.  move.w d0,s6l
  1192.  move.w d0,s7l
  1193.  swap d0
  1194.  
  1195.  move.w d0,s0h
  1196.  move.w d0,s1h
  1197.  move.w d0,s2h
  1198.  move.w d0,s3h
  1199.  
  1200.  move.w d0,s4h
  1201.  move.w d0,s5h
  1202.  move.w d0,s6h
  1203.  move.w d0,s7h 
  1204.  
  1205.  
  1206. ; move.w #52*256+64,borders
  1207. ; move.w #212*256+0,borders+8
  1208. ; move.w #52*256+64,borders+2592
  1209. ; move.w #212*256+128,borders+8+2592
  1210. ; move.w #52*256+192,borders+2592*2
  1211. ; move.w #212*256+0,borders+8+2592*2
  1212. ; move.w #52*256+192,borders+2592*3
  1213. ; move.w #212*256+128,borders+8+2592*3
  1214.  
  1215.  move.l #FacePlace,d0
  1216.  move.w d0,f1l
  1217.  swap d0
  1218.  move.w d0,f1h
  1219.  move.l #FacePlace+32*24,d0
  1220.  move.w d0,f2l
  1221.  swap d0
  1222.  move.w d0,f2h
  1223.  move.l #FacePlace+32*24*2,d0
  1224.  move.w d0,f3l
  1225.  swap d0
  1226.  move.w d0,f3h
  1227.  move.l #FacePlace+32*24*3,d0
  1228.  move.w d0,f4l
  1229.  swap d0
  1230.  move.w d0,f4h
  1231.  move.l #FacePlace+32*24*4,d0
  1232.  move.w d0,f5l
  1233.  swap d0
  1234.  move.w d0,f5h
  1235.   
  1236.  
  1237.  move.l #bigfield,d0
  1238.  move.w d0,ocl
  1239.  swap d0
  1240.  move.w d0,och
  1241.  
  1242.  bset.b #1,$bfe001
  1243.  
  1244. ; jmp stuff
  1245. ;endstuff:
  1246.  
  1247.  move.w #$00ff,$dff09e
  1248.  
  1249. ; move.l #Blurbfield,$dff080
  1250.  
  1251.  move.w #0,d0
  1252.  
  1253.  move.l scrn,d0
  1254.  move.w d0,pl1l
  1255.  swap d0
  1256.  move.w d0,pl1h
  1257.  
  1258.  swap d0
  1259.  add.l #10240,d0
  1260.  move.w d0,pl2l
  1261.  swap d0
  1262.  move.w d0,pl2h
  1263.  
  1264.  swap d0
  1265.  add.l #10240,d0
  1266.  move.w d0,pl3l
  1267.  swap d0
  1268.  move.w d0,pl3h
  1269.  
  1270.  swap d0
  1271.  add.l #10240,d0
  1272.  move.w d0,pl4l
  1273.  swap d0
  1274.  move.w d0,pl4h
  1275.  
  1276.  swap d0
  1277.  add.l #10240,d0
  1278.  move.w d0,pl5l
  1279.  swap d0
  1280.  move.w d0,pl5h
  1281.  
  1282.  swap d0
  1283.  add.l #10240,d0
  1284.  move.w d0,pl6l
  1285.  swap d0
  1286.  move.w d0,pl6h
  1287.  
  1288.  swap d0
  1289.  add.l #10240,d0
  1290.  move.w d0,pl7l
  1291.  swap d0
  1292.  move.w d0,pl7h
  1293.  
  1294.  swap d0
  1295.  add.l #10240,d0
  1296.  move.w d0,pl8l
  1297.  swap d0
  1298.  move.w d0,pl8h
  1299.  
  1300.  
  1301. ****************************
  1302.  jsr INITPLAYER
  1303. ; bsr initobjpos
  1304. ****************************
  1305.  
  1306.  
  1307.  move.l #$dff000,a6
  1308.  
  1309.  move.l #null,$dff0a0
  1310.  move.w #100,$dff0a4
  1311.  move.w #443,$dff0a6
  1312.  move.w #63,$dff0a8
  1313.  
  1314.  move.l #null2,$dff0b0
  1315.  move.w #100,$dff0b4
  1316.  move.w #443,$dff0b6
  1317.  move.w #63,$dff0b8
  1318.  
  1319.  move.l #null4,$dff0c0
  1320.  move.w #100,$dff0c4
  1321.  move.w #443,$dff0c6
  1322.  move.w #63,$dff0c8
  1323.  
  1324.  move.l #null3,$dff0d0
  1325.  move.w #100,$dff0d4
  1326.  move.w #443,$dff0d6
  1327.  move.w #63,$dff0d8
  1328.  
  1329.  ifeq CHEESEY
  1330.  
  1331.  move.l #tab,a1
  1332.  move.w #64,d7
  1333.  move.w #0,d6
  1334. outerlop
  1335.  move.l #pretab,a0
  1336.  move.w #255,d5
  1337. scaledownlop:
  1338.  move.b (a0)+,d0
  1339.  ext.w d0
  1340.  ext.l d0
  1341.  muls d6,d0
  1342.  asr.l #6,d0
  1343.  move.b d0,(a1)+
  1344.  dbra d5,scaledownlop
  1345.  addq #1,d6
  1346.  dbra d7,outerlop
  1347.  
  1348.  endc
  1349.  
  1350.  move.l #$dff000,a6
  1351.  
  1352.  move.w #$c008,intena(a6)
  1353.  
  1354.  move.w #$f,dmacon(a6)
  1355.  move.w #$820f,dmacon(a6)
  1356.  
  1357. ; bsr protinit
  1358.  
  1359.  
  1360. ; move.w #$20,$1dc(a6)
  1361.  
  1362.  move.w #$0,$dff034
  1363.  move.w #0,Conditions
  1364.  
  1365.  cmp.b #'n',mors
  1366.  beq.s .nokeys
  1367.  move.w #%111111111111,Conditions
  1368. .nokeys:
  1369.  
  1370.  move.l #KeyMap,a5
  1371.  clr.b $45(a5)
  1372.  
  1373.  move.l LEVELMUSIC,mt_data
  1374.  clr.b UseAllChannels
  1375.  
  1376. ; cmp.b #'b',Prefsfile+3
  1377. ; bne.s .noback
  1378.  
  1379. *********************************
  1380.  
  1381.  st CHANNELDATA
  1382.  jsr mt_init
  1383.  
  1384. *********************************
  1385.  
  1386.  
  1387. ;.noback:
  1388.  
  1389.  
  1390. ;
  1391. ; clr.b CHANNELDATA
  1392. ; clr.b CHANNELDATA+8
  1393. ; clr.b CHANNELDATA+16
  1394. ; clr.b CHANNELDATA+24
  1395. ;
  1396. ; cmp.b #'b',Prefsfile+3
  1397. ; bne.s noreserve
  1398. ;
  1399.  st CHANNELDATA
  1400.  st CHANNELDATA+8
  1401. ; st CHANNELDATA+16
  1402. ; st CHANNELDATA+24
  1403. ;noreserve: 
  1404.  
  1405. ; st CHANNELDATA
  1406. ; st CHANNELDATA+8
  1407.  
  1408.  move.l SampleList+6*8,pos0LEFT
  1409.  move.l SampleList+6*8+4,Samp0endLEFT
  1410.  move.l #playerheight,PLR1s_targheight
  1411.  move.l #playerheight,PLR1s_height
  1412.  move.l #playerheight,PLR2s_targheight
  1413.  move.l #playerheight,PLR2s_height
  1414.  
  1415. ; cmp.b #'n',mors
  1416. ; beq.s nohandshake
  1417. ;
  1418. ; move.b #%11011000,$bfd200
  1419. ; move.b #%00010000,$bfd000
  1420. ;waitloop:
  1421. ; btst.b #4,$bfd000
  1422. ; bne.s waitloop
  1423. ; move.b #%11000000,$bfd200
  1424.  
  1425. ;wtmouse:
  1426. ; btst #6,$bfe001
  1427. ; bne.s wtmouse
  1428.  
  1429. ;nohandshake:
  1430.  
  1431. ; jmp end
  1432.  
  1433. ; move.l COPSCRN1,drawpt
  1434. ; move.l COPSCRN2,olddrawpt
  1435.  
  1436.  jsr CLEARKEYBOARD
  1437. ; jsr MAKEBACKROUT
  1438.  
  1439.  clr.b MASTERQUITTING
  1440.  
  1441.  cmp.b #'n',mors
  1442.  seq SLAVEQUITTING
  1443.  
  1444. ; move.w #200,PLAYERTWOHEALTH
  1445. ; move.w #200,PLAYERONEHEALTH
  1446.  
  1447. ; move.l #ANOTHERSUP,$80
  1448. ; trap #0
  1449. ; rts
  1450. ;
  1451. ;ANOTHERSUP:
  1452.  
  1453.  move.l $4.w,a6
  1454.  jsr _LVOSuperState(a6)
  1455.  move.l d0,SSTACK
  1456.  
  1457.  CACHE_FREEZE_OFF d2
  1458.  
  1459. ; charlie
  1460. ; DATA_CACHE_ON d2
  1461.  
  1462.  DataCacheOn
  1463.  
  1464.  move.l $4.w,a6
  1465.  move.l SSTACK,d0
  1466.  jsr _LVOUserState(a6)
  1467.  
  1468.  move.l #0,hitcol
  1469.  
  1470.  cmp.b #'n',mors
  1471.  bne.s NOCLTXT
  1472.  
  1473.  move.b #0,lastpressed
  1474. .wtpress
  1475.  btst #6,$bfe001
  1476.  beq.s CLOSETXT
  1477.  btst #7,$bfe001
  1478.  beq.s CLOSETXT
  1479.  tst.b lastpressed
  1480.  beq.s .wtpress
  1481.  
  1482. CLOSETXT:
  1483.  
  1484.  move.w #$8f8,d0
  1485.  move.w #7,d1
  1486.  
  1487. .fdup
  1488.  move.w d0,TXTCOLL
  1489.  move.w d0,MIXCOLL
  1490.  sub.w #$121,d0
  1491. .wtframe:
  1492.  btst #5,$dff000+intreqrl
  1493.  beq.s .wtframe
  1494.  move.w #$0020,$dff000+intreq
  1495.  dbra d1,.fdup
  1496.  
  1497.  move.w #0,TXTCOLL
  1498.  move.w #0,MIXCOLL
  1499.  
  1500. NOCLTXT:
  1501.  
  1502.  
  1503.  
  1504.     move.l    4.w,a6
  1505.     jsr    _LVOForbid(a6)
  1506. ;    jsr    _LVODisable(a6)
  1507.  
  1508.  
  1509. ;    move.w    #%0111111111111111,intena+$dff000
  1510. ;    move.w    #%1000000011111111,intena+$dff000
  1511.  
  1512.  
  1513. ;charlie 
  1514.  move.l #PALETTEBIT,$dff084
  1515.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1516.  
  1517.  
  1518.  clr.b PLR1_Ducked
  1519.  clr.b PLR2_Ducked
  1520.  clr.b p1_ducked
  1521.  clr.b p2_ducked
  1522.  
  1523. ********************************************
  1524.  
  1525. ;    jmp docredits
  1526.  
  1527. ********************************************
  1528.  
  1529.  
  1530.  st doanything
  1531.  st dosounds
  1532.  
  1533.  jsr CLRNASTYMEM
  1534.  
  1535.  move.l #COMPACTMAP,a0
  1536.  move.l a0,LASTZONE
  1537.  move.w #255,d0
  1538. .clrmap
  1539.  move.l #0,(a0)+
  1540.  dbra d0,.clrmap
  1541.  
  1542.  move.l #COMPACTMAP,a0
  1543.  move.l #BIGMAP,a1
  1544.  
  1545.  bra NOALLWALLS
  1546.  
  1547.  move.l ZoneGraphAdds,a2
  1548. DOALLWALLS:
  1549.  move.l (a2),d0
  1550.  beq.s nomorezones
  1551.  move.l d0,a3
  1552.  
  1553.  addq #8,a2
  1554.  
  1555.  add.l LEVELGRAPHICS,a3
  1556.  addq #2,a3
  1557.  move.l a1,a4
  1558.  
  1559. ; DOLOWERROOM
  1560.  
  1561. innerwalls:
  1562.  move.b (a3),d1
  1563.  move.b 1(a3),d0
  1564.  bne doneinner
  1565.  
  1566.  tst.b d1
  1567.  blt noid
  1568.  
  1569.  move.b d1,d3
  1570.  and.w #15,d1
  1571.  
  1572.  moveq #0,d0
  1573.  move.w d1,d2
  1574.  add.w d1,d1
  1575.  add.w d2,d1
  1576.  addq #1,d1
  1577.  bset d1,d0
  1578.  btst #4,d3
  1579.  beq.s .nodoor
  1580.  addq #1,d1
  1581.  bset d1,d0
  1582. .nodoor
  1583.  
  1584.  or.l d0,(a0)
  1585.  
  1586.  move.w 2(a3),(a4)
  1587.  move.w 4(a3),2(a4)
  1588.  
  1589. noid:
  1590.  
  1591.  add.w #30,a3
  1592.  addq #4,a4
  1593.  
  1594.  bra innerwalls
  1595.  
  1596. doneinner:
  1597.  
  1598.  add.w #40,a1
  1599.  addq #4,a0
  1600.  
  1601.  bra DOALLWALLS
  1602. nomorezones:
  1603.  
  1604. NOALLWALLS
  1605.  
  1606.  move.w #96,MIDDLEX
  1607.  move.w #192,RIGHTX
  1608.  move.w #160,BOTTOMY
  1609.  move.w #80,TOTHEMIDDLE
  1610.  clr.b FULLSCR
  1611.  move.l scrn,a0
  1612.  jsr WIPEDISPLAY
  1613.  move.l scrn2,a0
  1614.  jsr WIPEDISPLAY
  1615.  
  1616.  st PLAYERONEGUNS+1
  1617.  st PLAYERTWOGUNS+1
  1618.  
  1619.  move.w #100,timetodamage
  1620.  
  1621.  move.w #299,d0
  1622.  move.l #DAMAGED,a0
  1623. CLRDAM:
  1624.  move.w #0,(a0)+
  1625.  dbra d0,CLRDAM
  1626.  
  1627.  moveq #0,d0
  1628.  move.w d0,STOPOFFSET
  1629.  neg.w d0
  1630.  add.w TOTHEMIDDLE,d0
  1631.  move.w d0,SMIDDLEY
  1632.  muls #320,d0
  1633.  move.l d0,SBIGMIDDLEY
  1634.  
  1635.  move.w #0,PLR1_AIMSPD
  1636.  move.w #0,PLR2_AIMSPD
  1637.  
  1638.  move.l scrn,SCRNSHOWPT
  1639.  
  1640.  move.l scrn2,SCRNDRAWPT
  1641.  
  1642.  
  1643.  
  1644.  move.l #MESSAGEBUFFER,a0
  1645.  move.w #19,d0
  1646. clrmessbuff:
  1647.  move.l #0,(a0)+
  1648.  dbra d0,clrmessbuff
  1649.  
  1650.  move.l #nullmessage,d0
  1651.  jsr SENDMESSAGE
  1652.  
  1653. lop:
  1654.  
  1655. ****************************
  1656. ; move.w #400,PLAYERONEHEALTH
  1657. ****************************
  1658.  
  1659.  move.w #%110000000000,$dff034
  1660.  
  1661. ; move.w COUNTER,d0
  1662. ; ext.l d0
  1663. ; divs #10,d0
  1664. ; swap d0
  1665. ; add.b #'0',d0
  1666. ; move.b d0,COUNTSPACE+2
  1667. ; swap d0
  1668. ; ext.l d0
  1669. ; divs #10,d0
  1670. ; swap d0
  1671. ; add.b #'0',d0
  1672. ; move.b d0,COUNTSPACE+1
  1673. ; swap d0
  1674. ; add.b #'0',d0
  1675. ; move.b d0,COUNTSPACE
  1676. ;
  1677. ; move.w COUNTER2,d0
  1678. ; ext.l d0
  1679. ; divs #10,d0
  1680. ; swap d0
  1681. ; add.b #'0',d0
  1682. ; move.b d0,COUNTSPACE+5
  1683. ; swap d0
  1684. ; ext.l d0
  1685. ; divs #10,d0
  1686. ; swap d0
  1687. ; add.b #'0',d0
  1688. ; move.b d0,COUNTSPACE+4
  1689. ; swap d0
  1690. ; add.b #'0',d0
  1691. ; move.b d0,COUNTSPACE+3
  1692.  
  1693. ;
  1694. ; move.l #COUNTSPACE,d0
  1695. ; jsr SENDMESSAGE
  1696. ;
  1697. ; move.w #0,COUNTER
  1698. ; move.w #0,COUNTER2
  1699.  
  1700.  move.b MAPON,REALMAPON
  1701.  
  1702.  move.b FULLSCRTEMP,d0
  1703.  move.b FULLSCR,d1
  1704.  eor.b d1,d0
  1705.  beq .notswapscr2
  1706.  
  1707.  move.b FULLSCRTEMP,FULLSCR
  1708.  beq.s .notswapscr3
  1709.  
  1710.  cmp.w #100,WIDESCRN
  1711.  blt.s .okwidee
  1712.  move.w #100,WIDESCRN
  1713. .okwidee:
  1714.  
  1715.  move.w #144,MIDDLEX
  1716.  move.w #288,RIGHTX
  1717.  move.w #232,BOTTOMY
  1718.  move.w #120,TOTHEMIDDLE
  1719.  move.l SCRNSHOWPT,a0
  1720.  jsr WIPEDISPLAY
  1721.  move.l SCRNDRAWPT,a0
  1722.  jsr WIPEDISPLAY
  1723.  
  1724.  bra.s .notswapscr2
  1725.  
  1726. .notswapscr3:
  1727.  cmp.w #60,WIDESCRN
  1728.  blt.s .okwide
  1729.  move.w #60,WIDESCRN
  1730. .okwide:
  1731.  
  1732.  
  1733.  move.w #96,MIDDLEX
  1734.  move.w #192,RIGHTX
  1735.  move.w #160,BOTTOMY
  1736.  move.w #80,TOTHEMIDDLE
  1737.  move.l SCRNSHOWPT,a0
  1738.  jsr WIPEDISPLAY
  1739.  move.l SCRNDRAWPT,a0
  1740.  jsr WIPEDISPLAY
  1741. .notswapscr2:
  1742.  
  1743.  
  1744.  btst #6,$bfe001
  1745. ;charlie bne.b .nocop
  1746.  
  1747. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1748.  
  1749. .nocop
  1750.  
  1751.  move.l #KeyMap,a5
  1752.  
  1753.  cmp.b #'n',mors
  1754.  bne .nopause
  1755.  tst.b $19(a5)
  1756.  beq.s .nopause
  1757.  clr.b doanything
  1758.  
  1759. .waitrel:
  1760.  
  1761.  tst.b PLR1JOY
  1762.  beq.s .NOJOY
  1763.  jsr _ReadJoy1
  1764. .NOJOY
  1765.  
  1766.  tst.b $19(a5)
  1767.  bne.s .waitrel
  1768.  
  1769.  bsr PAUSEOPTS
  1770.  
  1771.  st doanything
  1772. .nopause: 
  1773.  
  1774.  move.l hitcol,d0
  1775.  move.l d0,d1
  1776.  
  1777. ********************************************
  1778. * Remove after colour testing 
  1779. ; moveq #0,d1
  1780. ********************************************
  1781.  
  1782.  add.l #PALETTEBIT,d1
  1783.  tst.l d0
  1784.  beq.s nofadedownhc
  1785.  sub.l #2116,d0
  1786.  move.l d0,hitcol
  1787. nofadedownhc:
  1788.  
  1789.  move.l d1,a0
  1790.  move.l #PALETTESPACE,a1
  1791.  move.l #(2116/4)-2,d0
  1792. putinpal:
  1793.  move.l (a0)+,(a1)+
  1794.  dbra d0,putinpal
  1795.  
  1796.  st READCONTROLS
  1797.  move.l #$dff000,a6
  1798.  
  1799.  
  1800.  cmp.b #'n',mors
  1801.  beq .nopause
  1802.  
  1803.  move.b SLAVEPAUSE,d0
  1804.  or.b MASTERPAUSE,d0
  1805.  beq.s .nopause
  1806.  clr.b doanything
  1807.  
  1808.  move.l #KeyMap,a5
  1809. .waitrel:
  1810.  
  1811.  cmp.b #'s',mors
  1812.  beq.s .RE2
  1813.  tst.b PLR1JOY
  1814.  beq.s .NOJOY
  1815.  jsr _ReadJoy1
  1816.  bra .RE1
  1817. .RE2:
  1818.  tst.b PLR2JOY
  1819.  beq.s .NOJOY
  1820.  jsr _ReadJoy2
  1821. .RE1
  1822. .NOJOY:
  1823.  tst.b $19(a5)
  1824.  bne.s .waitrel
  1825.  
  1826.  bsr PAUSEOPTS
  1827.  
  1828.  cmp.b #'m',mors
  1829.  bne.s .slavelast
  1830.  Jsr SENDFIRST
  1831.  bra .masfirst
  1832. .slavelast
  1833.  Jsr RECFIRST
  1834. .masfirst:
  1835.  clr.b SLAVEPAUSE
  1836.  clr.b MASTERPAUSE
  1837.  st doanything
  1838.  
  1839. .nopause: 
  1840.  
  1841.  
  1842.  move.l drawpt,d0
  1843.  move.l olddrawpt,drawpt
  1844.  move.l d0,olddrawpt
  1845.  
  1846.  move.l SCRNDRAWPT,d0
  1847.  move.l SCRNSHOWPT,SCRNDRAWPT
  1848.  move.l d0,SCRNSHOWPT
  1849.  
  1850. ; move.l d0,$dff084    
  1851.  move.l drawpt,a3
  1852. ; move.l COPSCRNBUFF,a3
  1853.  adda.w #10,a3
  1854.  move.l a3,frompt
  1855.  add.l #104*4*40,a3
  1856.  move.l a3,midpt
  1857.  
  1858.  cmp.b #'s',mors
  1859.  beq.s nowaitslave
  1860.  
  1861. waitfortop:
  1862.  
  1863.  btst.b #0,intreqrl(a6)
  1864.  beq.b waitfortop
  1865.  
  1866.  move.w #$1,intreq(a6)
  1867. ; move.l #PLR1_GunData,GunData
  1868.  move.b PLR1_GunSelected,GunSelected
  1869.  bra waitmaster
  1870.  
  1871. nowaitslave:
  1872. ; move.l #PLR2_GunData,GunData
  1873.  move.b PLR2_GunSelected,GunSelected
  1874. waitmaster:
  1875.  
  1876.  move.l d0,d1
  1877.  move.l d1,d0
  1878.  move.w d0,pl1l
  1879.  swap d0
  1880.  move.w d0,pl1h
  1881.  
  1882.  add.l #10240,d1
  1883.  move.l d1,d0
  1884.  move.w d0,pl2l
  1885.  swap d0
  1886.  move.w d0,pl2h
  1887.  
  1888.  add.l #10240,d1
  1889.  move.l d1,d0
  1890.  move.w d0,pl3l
  1891.  swap d0
  1892.  move.w d0,pl3h
  1893.  
  1894.  add.l #10240,d1
  1895.  move.l d1,d0
  1896.  move.w d0,pl4l
  1897.  swap d0
  1898.  move.w d0,pl4h
  1899.  
  1900.  add.l #10240,d1
  1901.  move.l d1,d0
  1902.  move.w d0,pl5l
  1903.  swap d0
  1904.  move.w d0,pl5h
  1905.  
  1906.  add.l #10240,d1
  1907.  move.l d1,d0
  1908.  move.w d0,pl6l
  1909.  swap d0
  1910.  move.w d0,pl6h
  1911.  
  1912.  add.l #10240,d1
  1913.  move.l d1,d0
  1914.  move.w d0,pl7l
  1915.  swap d0
  1916.  move.w d0,pl7h
  1917.  
  1918.  add.l #10240,d1
  1919.  move.l d1,d0
  1920.  move.w d0,pl8l
  1921.  swap d0
  1922.  move.w d0,pl8h 
  1923.  
  1924.  move.l #SMIDDLEY,a0
  1925.  movem.l (a0)+,d0/d1
  1926.  move.l d0,MIDDLEY
  1927.  move.l d1,MIDDLEY+4
  1928.  
  1929.  move.l waterpt,a0
  1930.  move.l (a0)+,watertouse
  1931.  cmp.l #endwaterlist,a0
  1932.  blt.s okwat
  1933.  move.l #waterlist,a0
  1934. okwat:
  1935.  move.l a0,waterpt
  1936.  
  1937.  add.w #640,wtan
  1938.  and.w #8191,wtan
  1939.  add.l #1,wateroff
  1940.  and.l #$3fff3fff,wateroff
  1941.  
  1942.  move.l PLR1_xoff,OLDX1
  1943.  move.l PLR1_zoff,OLDZ1
  1944.  move.l PLR2_xoff,OLDX2
  1945.  move.l PLR2_zoff,OLDZ2
  1946.  
  1947.  move.l #$dff000,a6
  1948.  
  1949.  cmp.b #'s',mors
  1950.  beq ASlaveShouldWaitOnHisMaster
  1951.  
  1952.  cmp.b #'n',mors
  1953.  bne NotOnePlayer
  1954.  
  1955.  movem.l d0-d7/a0-a6,-(a7)
  1956.  
  1957.  moveq #0,d0
  1958.  move.b GunSelected,d0
  1959.  move.l LINKFILE,a6
  1960.  add.l #GunBulletTypes,a6
  1961.  move.w (a6,d0.w*8),d0
  1962.  
  1963.  move.l #PLAYERONEAMMO,a6
  1964.  move.w (a6,d0.w*2),d0
  1965.  move.w d0,Ammo
  1966.  movem.l (a7)+,d0-d7/a0-a6
  1967.  
  1968.  move.w PLAYERONEHEALTH,Energy
  1969.  
  1970.  move.w FramesToDraw,TempFrames
  1971.  cmp.w #15,TempFrames
  1972.  blt.s .okframe
  1973.  move.w #15,TempFrames
  1974. .okframe:
  1975.  move.w #0,FramesToDraw
  1976.  
  1977. *********************************************
  1978. *********** TAKE THIS OUT *******************
  1979. *********************************************
  1980.  
  1981.  move.l CHEATPTR,a4
  1982.  add.l #200000,a4
  1983.  moveq #0,d0
  1984.  move.b (a4),d0
  1985.  
  1986.  move.l #KeyMap,a5
  1987.  tst.b (a5,d0.w)
  1988.  beq.s .nocheat
  1989.  
  1990.  addq #1,a4
  1991.  cmp.l #ENDCHEAT,a4
  1992.  blt.s .nocheat
  1993.  cmp.w #0,CHEATNUM
  1994.  beq.s .nocheat
  1995.  sub.w #1,CHEATNUM
  1996.  move.l #CHEATFRAME,a4
  1997.  move.w #127,PLR1_energy
  1998.  jsr EnergyBar
  1999. .nocheat
  2000.  
  2001.  sub.l #200000,a4
  2002.  move.l a4,CHEATPTR
  2003.  
  2004. **********************************************
  2005. **********************************************
  2006. **********************************************
  2007.  
  2008.  move.l PLR1s_xoff,p1_xoff
  2009.  move.l PLR1s_zoff,p1_zoff
  2010.  move.l PLR1s_yoff,p1_yoff
  2011.  move.l PLR1s_height,p1_height
  2012.  move.w PLR1s_angpos,p1_angpos
  2013.  move.w PLR1_bobble,p1_bobble
  2014.  move.b PLR1_clicked,p1_clicked
  2015.  move.b PLR1_fire,p1_fire
  2016.  clr.b PLR1_clicked
  2017.  move.b PLR1_SPCTAP,p1_spctap
  2018.  clr.b PLR1_SPCTAP
  2019.  move.b PLR1_Ducked,p1_ducked
  2020.  move.b PLR1_GunSelected,p1_gunselected
  2021.  
  2022.  bsr PLR1_Control
  2023.  
  2024.  move.l PLR1_Roompt,a0
  2025.  move.l ToZoneRoof(a0),SplitHeight
  2026.  move.w p1_xoff,THISPLRxoff
  2027.  move.w p1_zoff,THISPLRzoff
  2028.  
  2029.  
  2030.  move.l #$60000,p2_yoff
  2031.  move.l PLR2_Obj,a0
  2032.  move.w #-1,GraphicRoom(a0)
  2033.  move.w #-1,12(a0)
  2034.  move.b #0,17(a0)
  2035.  move.l #BollocksRoom,PLR2_Roompt
  2036.  
  2037.  bra donetalking
  2038.  
  2039. NotOnePlayer:
  2040.  move.l #KeyMap,a5
  2041.  tst.b $19(a5)
  2042.  sne MASTERPAUSE
  2043.  
  2044. *********************************
  2045.  move.w PLAYERONEHEALTH,Energy
  2046. ; change this back
  2047. *********************************
  2048.  movem.l d0-d7/a0-a6,-(a7)
  2049.  
  2050.  moveq #0,d0
  2051.  move.b GunSelected,d0
  2052.  move.l LINKFILE,a6
  2053.  add.l #GunBulletTypes,a6
  2054.  move.w (a6,d0.w*8),d0
  2055.  
  2056.  move.l #PLAYERONEAMMO,a6
  2057.  move.w (a6,d0.w*2),d0
  2058.  move.w d0,Ammo
  2059.  movem.l (a7)+,d0-d7/a0-a6
  2060.  
  2061.  jsr SENDFIRST
  2062.  
  2063.  move.w FramesToDraw,TempFrames
  2064.  cmp.w #15,TempFrames
  2065.  blt.s .okframe
  2066.  move.w #15,TempFrames
  2067. .okframe:
  2068.  move.w #0,FramesToDraw
  2069.  
  2070.  move.l PLR1s_xoff,p1_xoff
  2071.  move.l PLR1s_zoff,p1_zoff
  2072.  move.l PLR1s_yoff,p1_yoff
  2073.  move.l PLR1s_height,p1_height
  2074.  move.w PLR1s_angpos,p1_angpos
  2075.  move.w PLR1_bobble,p1_bobble
  2076.  move.b PLR1_clicked,p1_clicked
  2077.  clr.b PLR1_clicked
  2078.  move.b PLR1_fire,p1_fire
  2079.  move.b PLR1_SPCTAP,p1_spctap
  2080.  clr.b PLR1_SPCTAP
  2081.  move.b PLR1_Ducked,p1_ducked
  2082.  move.b PLR1_GunSelected,p1_gunselected
  2083.  
  2084.  move.l PLR1_AIMSPD,d0
  2085.  jsr SENDFIRST
  2086.  move.l d0,PLR2_AIMSPD
  2087.  
  2088.  move.l p1_xoff,d0
  2089.  jsr SENDFIRST
  2090.  move.l d0,p2_xoff
  2091.  
  2092.  move.l p1_zoff,d0
  2093.  jsr SENDFIRST
  2094.  move.l d0,p2_zoff 
  2095.  
  2096.  move.l p1_yoff,d0
  2097.  jsr SENDFIRST
  2098.  move.l d0,p2_yoff
  2099.   
  2100.  move.l p1_height,d0
  2101.  jsr SENDFIRST
  2102.  move.l d0,p2_height
  2103.  
  2104.  move.w p1_angpos,d0
  2105.  swap d0
  2106.  move.w p1_bobble,d0
  2107.  jsr SENDFIRST
  2108.  move.w d0,p2_bobble
  2109.  swap d0
  2110.  move.w d0,p2_angpos
  2111.  
  2112.  
  2113.  move.w TempFrames,d0
  2114.  swap d0
  2115.  move.b p1_spctap,d0
  2116.  lsl.w #8,d0
  2117.  move.b p1_clicked,d0
  2118.  jsr SENDFIRST
  2119.  move.b d0,p2_clicked
  2120.  lsr.w #8,d0
  2121.  move.b d0,p2_spctap
  2122.  
  2123.  
  2124.  move.w Rand1,d0
  2125.  swap d0
  2126.  move.b p1_ducked,d0
  2127.  or.b PLR2_Squished,d0
  2128.  lsl.w #8,d0
  2129.  move.b p1_gunselected,d0
  2130.  jsr SENDFIRST
  2131.  move.b d0,p2_gunselected
  2132.  lsr.w #8,d0
  2133.  move.b d0,p2_ducked
  2134.  
  2135.  move.b p1_fire,d0
  2136.  lsl.w #8,d0
  2137.  move.b MASTERQUITTING,d0
  2138.  or.b d0,SLAVEQUITTING
  2139.  swap d0
  2140.  move.b MASTERPAUSE,d0
  2141.  or.b d0,SLAVEPAUSE
  2142.  jsr SENDFIRST
  2143.  or.b d0,MASTERPAUSE
  2144.  or.b d0,SLAVEPAUSE
  2145.  swap d0
  2146.  or.b d0,SLAVEQUITTING
  2147.  or.b d0,MASTERQUITTING
  2148.  lsr.w #8,d0
  2149.  move.b d0,p2_fire
  2150.  
  2151.  bsr PLR1_Control
  2152.  bsr PLR2_Control
  2153.  move.l PLR1_Roompt,a0
  2154.  move.l ToZoneRoof(a0),SplitHeight
  2155.  move.w p1_xoff,THISPLRxoff
  2156.  move.w p1_zoff,THISPLRzoff
  2157.  
  2158.  bra donetalking
  2159.  
  2160. ASlaveShouldWaitOnHisMaster:
  2161.  
  2162.  move.l #KeyMap,a5
  2163.  tst.b $19(a5)
  2164.  sne SLAVEPAUSE
  2165.  
  2166.  movem.l d0-d7/a0-a6,-(a7)
  2167.  
  2168.  moveq #0,d0
  2169.  move.b GunSelected,d0
  2170.  move.l LINKFILE,a6
  2171.  add.l #GunBulletTypes,a6
  2172.  move.w (a6,d0.w*8),d0
  2173.  
  2174.  move.l #PLAYERTWOAMMO,a6
  2175.  move.w (a6,d0.w*2),d0
  2176.  move.w d0,Ammo
  2177.  movem.l (a7)+,d0-d7/a0-a6
  2178.  
  2179.  move.w PLAYERTWOHEALTH,Energy
  2180.  
  2181.  jsr RECFIRST
  2182.  
  2183.  move.l PLR2s_xoff,p2_xoff
  2184.  move.l PLR2s_zoff,p2_zoff
  2185.  move.l PLR2s_yoff,p2_yoff
  2186.  move.l PLR2s_height,p2_height
  2187.  move.w PLR2s_angpos,p2_angpos
  2188.  move.w PLR2_bobble,p2_bobble
  2189.  move.b PLR2_clicked,p2_clicked
  2190.  clr.b PLR2_clicked
  2191.  move.b PLR2_fire,p2_fire
  2192.  move.b PLR2_SPCTAP,p2_spctap
  2193.  clr.b PLR2_SPCTAP
  2194.  move.b PLR2_Ducked,p2_ducked
  2195.  move.b PLR2_GunSelected,p2_gunselected
  2196.  
  2197.  move.l PLR2_AIMSPD,d0
  2198.  jsr RECFIRST
  2199.  move.l d0,PLR1_AIMSPD
  2200.  
  2201.  move.l p2_xoff,d0
  2202.  jsr RECFIRST
  2203.  move.l d0,p1_xoff
  2204.  
  2205.  move.l p2_zoff,d0
  2206.  jsr RECFIRST
  2207.  move.l d0,p1_zoff
  2208.  
  2209.  move.l p2_yoff,d0
  2210.  jsr RECFIRST
  2211.  move.l d0,p1_yoff
  2212.  
  2213.  move.l p2_height,d0
  2214.  jsr RECFIRST
  2215.  move.l d0,p1_height
  2216.  
  2217.  move.w p2_angpos,d0
  2218.  swap d0
  2219.  move.w p2_bobble,d0
  2220.  jsr RECFIRST
  2221.  move.w d0,p1_bobble
  2222.  swap d0
  2223.  move.w d0,p1_angpos
  2224.  
  2225.  
  2226.  move.b p2_spctap,d0
  2227.  lsl.w #8,d0
  2228.  move.b p2_clicked,d0
  2229.  jsr RECFIRST
  2230.  move.b d0,p1_clicked
  2231.  lsr.w #8,d0
  2232.  move.b d0,p1_spctap
  2233.  swap d0
  2234.  move.w d0,TempFrames
  2235.  
  2236.  move.b p2_ducked,d0
  2237.  or.b PLR2_Squished,d0
  2238.  lsl.w #8,d0
  2239.  move.b p2_gunselected,d0
  2240.  jsr RECFIRST
  2241.  move.b d0,p1_gunselected
  2242.  lsr.w #8,d0
  2243.  move.b d0,p1_ducked
  2244.  swap d0
  2245.  move.w d0,Rand1
  2246.  
  2247.  move.b p2_fire,d0
  2248.  lsl.w #8,d0
  2249.  move.b SLAVEQUITTING,d0
  2250.  or.b d0,MASTERQUITTING
  2251.  swap d0
  2252.  move.b SLAVEPAUSE,d0
  2253.  or.b d0,MASTERPAUSE
  2254.  jsr RECFIRST
  2255.  or.b d0,MASTERPAUSE
  2256.  or.b d0,SLAVEPAUSE
  2257.  swap d0
  2258.  or.b d0,SLAVEQUITTING
  2259.  or.b d0,MASTERQUITTING
  2260.  lsr.w #8,d0
  2261.  move.b d0,p1_fire
  2262.  
  2263.  
  2264.  bsr PLR1_Control
  2265.  bsr PLR2_Control
  2266.  move.w p2_xoff,THISPLRxoff
  2267.  move.w p2_zoff,THISPLRzoff
  2268.  move.l PLR2_Roompt,a0
  2269.  move.l ToZoneRoof(a0),SplitHeight
  2270.  
  2271. donetalking:
  2272.  
  2273.  
  2274.  move.l #ZoneBrightTable,a1
  2275.  move.l ZoneAdds,a2
  2276.  move.l PLR2_ListOfGraphRooms,a0
  2277. ; move.l PLR2_PointsToRotatePtr,a5
  2278.  move.l a0,a5
  2279.  cmp.b #'s',mors
  2280.  beq.s doallz
  2281.  move.l PLR1_ListOfGraphRooms,a0
  2282. ; move.l PLR1_PointsToRotatePtr,a5
  2283.  move.l a0,a5 
  2284. doallz
  2285.  move.w (a0),d0
  2286.  blt.s doneallz
  2287.  add.w #8,a0
  2288.  
  2289.  move.l (a2,d0.w*4),a3
  2290.  add.l LEVELDATA,a3
  2291.  move.w ToZoneBrightness(a3),d2
  2292.  
  2293.  blt.s justbright
  2294.  move.w d2,d3
  2295.  lsr.w #8,d3
  2296.  tst.b d3
  2297.  beq.s justbright
  2298.  
  2299.  move.l #BrightAnimTable,a4
  2300.  move.w -2(a4,d3.w*2),d2
  2301.  
  2302. justbright:
  2303.  muls #32,d2
  2304.  divs #20,d2
  2305.  move.w d2,(a1,d0.w*4)
  2306.  
  2307.  move.w ToUpperBrightness(a3),d2
  2308.  
  2309.  blt.s justbright2
  2310.  move.w d2,d3
  2311.  lsr.w #8,d3
  2312.  tst.b d3
  2313.  beq.s justbright2
  2314.  
  2315.  move.l #BrightAnimTable,a4
  2316.  move.w -2(a4,d3.w*2),d2
  2317.  
  2318. justbright2:
  2319.  
  2320.  muls #32,d2
  2321.  divs #20,d2
  2322.  move.w d2,2(a1,d0.w*4)
  2323.  
  2324.  bra doallz
  2325.  
  2326. doneallz:
  2327.  
  2328.  move.l PointBrights,a2
  2329.  move.l #CurrentPointBrights,a3
  2330. justtheone:
  2331.  move.w (a5),d0
  2332.  blt whythehell
  2333.  addq #8,a5
  2334.  
  2335.  muls #40,d0
  2336.  
  2337.  move.w #39,d7
  2338.  
  2339. allinzone:
  2340.  move.w (a2,d0.w*2),d2
  2341.  
  2342.  tst.b d2
  2343.  blt.s .justbright
  2344.  move.w d2,d3
  2345.  lsr.w #8,d3
  2346.  tst.b d3
  2347.  beq.s .justbright
  2348.  
  2349.  move.w d3,d4
  2350.  and.w #$f,d3
  2351.  lsr.w #4,d4
  2352.  add.w #1,d4
  2353.  move.l #BrightAnimTable,a0
  2354.  move.w -2(a0,d3.w*2),d3
  2355.  ext.w d2
  2356.  sub.w d2,d3
  2357.  muls d4,d3
  2358.  asr.w #4,d3
  2359.  add.w d3,d2
  2360.  
  2361. .justbright:
  2362.  ext.w d2
  2363.  
  2364.  muls #31,d2
  2365.  divs #20,d2
  2366.  bge.s .itspos
  2367.  sub.w #600,d2
  2368. .itspos:
  2369.  add.w #300,d2
  2370.  
  2371.  move.w d2,(a3,d0.w*2)
  2372.  addq #1,d0
  2373.  dbra d7,allinzone
  2374.  
  2375.  bra justtheone
  2376.  
  2377. whythehell:
  2378.  
  2379.  move.l PLR1_Roompt,a0
  2380.  move.l #CurrentPointBrights,a1
  2381.  move.l ZoneBorderPts,a2
  2382.  move.w (a0),d0
  2383.  muls #10,d0
  2384.  lea (a2,d0.w*2),a2
  2385.  lea (a1,d0.w*8),a1
  2386.  
  2387.  moveq #9,d7
  2388.  moveq #0,d0
  2389.  moveq #0,d1
  2390. findaverage:
  2391.  tst.w (a2)+
  2392.  blt.s .foundaverage
  2393.  addq #1,d0
  2394.  move.w (a1)+,d2
  2395.  bge.s .okpos
  2396.  neg.w d2
  2397. .okpos:
  2398.  add.w d2,d1
  2399.  
  2400.  dbra d7,findaverage
  2401.  
  2402. .foundaverage:
  2403.  
  2404.  ext.l d1
  2405.  divs d0,d1
  2406.  sub.w #300,d1
  2407.  move.w d1,PLR1_RoomBright
  2408.  
  2409.  cmp.b #'n',mors
  2410.  beq nosee
  2411.  
  2412.  move.l PLR1_Roompt,FromRoom
  2413.  move.l PLR2_Roompt,ToRoom
  2414.  move.w p1_xoff,Viewerx
  2415.  move.w p1_zoff,Viewerz
  2416.  move.l p1_yoff,d0
  2417.  asr.l #7,d0
  2418.  move.w d0,Viewery
  2419.  move.w p2_xoff,Targetx
  2420.  move.w p2_zoff,Targetz
  2421.  move.l p2_yoff,d0
  2422.  asr.l #7,d0
  2423.  move.w d0,Targety
  2424.  move.b PLR1_StoodInTop,ViewerTop
  2425.  move.b PLR2_StoodInTop,TargetTop
  2426.  jsr CanItBeSeen
  2427.  
  2428.  move.l PLR1_Obj,a0
  2429.  move.b CanSee,d0
  2430.  and.b #2,d0
  2431.  move.b d0,17(a0)
  2432.  move.l PLR2_Obj,a0
  2433.  move.b CanSee,d0
  2434.  and.b #1,d0
  2435.  move.b d0,17(a0)
  2436.  
  2437. nosee:
  2438.  
  2439.  
  2440.  move.w TempFrames,d0
  2441.  add.w d0,p1_holddown
  2442.  cmp.w #30,p1_holddown
  2443.  blt.s oklength
  2444.  move.w #30,p1_holddown
  2445. oklength:
  2446.  
  2447.  tst.b p1_fire
  2448.  bne.s okstillheld
  2449.  sub.w d0,p1_holddown
  2450.  bge.s okstillheld
  2451.  move.w #0,p1_holddown
  2452.  
  2453. okstillheld:
  2454.  
  2455.  move.w TempFrames,d0
  2456.  add.w d0,p2_holddown
  2457.  
  2458.  cmp.w #30,p2_holddown
  2459.  blt.s oklength2
  2460.  move.w #30,p2_holddown
  2461. oklength2:
  2462.  
  2463.  
  2464.  tst.b p2_fire
  2465.  bne.s okstillheld2
  2466.  sub.w d0,p2_holddown
  2467.  bge.s okstillheld2
  2468.  move.w #0,p2_holddown
  2469. okstillheld2:
  2470.  
  2471. ***** CHECKING LIGHT *********
  2472.  
  2473. ; move.w #-20,d0
  2474. ; move.w PLR1_xoff,d1
  2475. ; move.w PLR1_zoff,d2
  2476. ; move.l PLR1_Roompt,a0
  2477. ; move.w (a0),d3
  2478. ; move.w PLR1_angpos,d4
  2479. ;
  2480. ; jsr BRIGHTENPOINTSANGLE
  2481.  
  2482. ******************************
  2483.  
  2484. ; move.l #PLR1_GunData,a1
  2485. ; move.w p1_holddown,d0
  2486. ; move.w #50,10+32*3(a1)
  2487. ; move.l #PLR2_GunData,a1
  2488. ; move.w p2_holddown,d0
  2489. ; move.w #50,10+32*3(a1)
  2490.  
  2491. ******************************************
  2492. ******************************************
  2493.  
  2494.  move.w TempFrames,d1
  2495.  bgt.s noze
  2496.  moveq #1,d1
  2497. noze:
  2498.  
  2499.  move.w PLR1_xoff,d0
  2500.  sub.w OLDX1,d0
  2501.  asl.w #4,d0
  2502.  ext.l d0
  2503.  divs d1,d0
  2504.  move.w d0,XDIFF1
  2505.  move.w PLR2_xoff,d0
  2506.  sub.w OLDX2,d0
  2507.  asl.w #4,d0
  2508.  ext.l d0
  2509.  divs d1,d0
  2510.  move.w d0,XDIFF2
  2511.  move.w PLR1_zoff,d0
  2512.  sub.w OLDZ1,d0
  2513.  asl.w #4,d0
  2514.  ext.l d0
  2515.  divs d1,d0
  2516.  move.w d0,ZDIFF1
  2517.  move.w PLR2_zoff,d0
  2518.  sub.w OLDZ2,d0
  2519.  asl.w #4,d0
  2520.  ext.l d0
  2521.  divs d1,d0
  2522.  move.w d0,ZDIFF2
  2523.  
  2524.  cmp.b #'s',mors
  2525.  beq.s ImPlayer2OhYesIAm
  2526.  bsr USEPLR1
  2527.  bra IWasPlayer1
  2528.  
  2529. ImPlayer2OhYesIAm:
  2530.  bsr USEPLR2
  2531. IWasPlayer1:
  2532.  
  2533.  
  2534.  cmp.b #'s',mors
  2535.  beq drawplayer2
  2536.  
  2537.  move.w #0,scaleval
  2538.  
  2539.  move.l PLR1_xoff,xoff
  2540.  move.l PLR1_yoff,yoff
  2541.  move.l PLR1_zoff,zoff
  2542.  move.w PLR1_angpos,angpos
  2543.  move.w PLR1_cosval,cosval
  2544.  move.w PLR1_sinval,sinval
  2545.  
  2546.  
  2547.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2548.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2549.  move.b PLR1_Echo,PLREcho
  2550.  move.l PLR1_Roompt,Roompt
  2551.  
  2552.  move.l #KeyMap,a5
  2553.  moveq #0,d5
  2554.  move.b look_behind_key,d5
  2555.  tst.b (a5,d5.w)
  2556.  beq.s .nolookback
  2557.  
  2558.  move.l PLR1_Obj,a0
  2559.  move.w #-1,12+128(a0)
  2560.  
  2561.  eor.w #4096,angpos 
  2562.  neg.w cosval
  2563.  neg.w sinval
  2564. .nolookback:
  2565.  
  2566.  bsr OrderZones
  2567.  jsr objmoveanim
  2568.  jsr EnergyBar
  2569.  jsr AmmoBar
  2570.  
  2571.  
  2572. ;********************************************
  2573. ;************* Do reflection ****************
  2574. ;
  2575. ; move.l ListOfGraphRooms,a0
  2576. ; move.l ZoneAdds,a1
  2577. ;checkwaterheights
  2578. ; move.w (a0),d0
  2579. ; blt allzonesdone
  2580. ; addq #8,a0
  2581. ; move.l (a1,d0.w*4),a2
  2582. ; add.l LEVELDATA,a2
  2583. ; move.l ToZoneWater(a2),d0
  2584. ; cmp.l ToZoneFloor(a2),d0
  2585. ; blt.s WEHAVEAHEIGHT
  2586. ; bra.s checkwaterheights
  2587. ;
  2588. ;WEHAVEAHEIGHT:
  2589. ;
  2590. ; sub.l yoff,d0
  2591. ; blt.s underwater
  2592. ; add.l d0,d0
  2593. ; add.l d0,yoff
  2594. ; move.l FASTBUFFER2,FASTBUFFER
  2595. ; move.w #0,leftclip
  2596. ; move.w RIGHTX,rightclip
  2597. ; move.w #0,deftopclip
  2598. ; move.w #BOTTOMY/2,defbotclip
  2599. ; move.w #0,topclip
  2600. ; move.w #BOTTOMY/2,botclip
  2601. ;
  2602. ; clr.b DOANYWATER 
  2603. ; bsr DrawDisplay
  2604. ;allzonesdone:
  2605. ;underwater:
  2606.  
  2607. ********************************************
  2608.  
  2609.  st DOANYWATER
  2610.  
  2611.  move.l PLR1_yoff,yoff
  2612.  
  2613.  move.w #0,leftclip
  2614.  move.w RIGHTX,rightclip
  2615.  move.w #0,deftopclip
  2616.  move.w WIDESCRN,d0
  2617.  add.w d0,deftopclip
  2618.  
  2619.  move.w BOTTOMY,defbotclip
  2620.  sub.w d0,defbotclip
  2621.  move.w #0,topclip
  2622.  add.w d0,topclip
  2623.  move.w BOTTOMY,botclip
  2624.  sub.w d0,botclip
  2625. ; sub.l #10*104*4,frompt
  2626. ; sub.l #10*104*4,midpt
  2627.  
  2628. * Subroom loop
  2629.  
  2630.  bsr DrawDisplay 
  2631.  
  2632.  bra nodrawp2
  2633.  
  2634. drawplayer2
  2635.  
  2636.  move.w #0,scaleval
  2637.  move.l PLR2_xoff,xoff
  2638.  move.l PLR2_yoff,yoff
  2639.  move.l PLR2_zoff,zoff
  2640.  move.w PLR2_angpos,angpos
  2641.  move.w PLR2_cosval,cosval
  2642.  move.w PLR2_sinval,sinval 
  2643.  
  2644.  
  2645.  
  2646.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2647.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2648.  move.b PLR2_Echo,PLREcho
  2649.  move.l PLR2_Roompt,Roompt
  2650.  
  2651.  move.l #KeyMap,a5
  2652.  moveq #0,d5
  2653.  move.b look_behind_key,d5
  2654.  tst.b (a5,d5.w)
  2655.  beq.s .nolookback
  2656.  
  2657.  move.l PLR1_Obj,a0
  2658.  move.w #-1,12+128(a0)
  2659.  eor.w #4096,angpos 
  2660.  
  2661.  neg.w cosval
  2662.  neg.w sinval
  2663. .nolookback:
  2664.  
  2665.  bsr OrderZones
  2666.  jsr objmoveanim
  2667.  jsr EnergyBar
  2668.  jsr AmmoBar
  2669.  
  2670.  move.w WIDESCRN,d0
  2671.  
  2672.  move.w #0,leftclip
  2673.  move.w RIGHTX,rightclip
  2674.  move.w #0,deftopclip
  2675.  add.w d0,deftopclip
  2676.  move.w BOTTOMY,defbotclip
  2677.  sub.w d0,defbotclip
  2678.  move.w #0,topclip
  2679.  add.w d0,topclip
  2680.  move.w BOTTOMY,botclip
  2681.  sub.w d0,botclip
  2682.  
  2683.  bsr DrawDisplay
  2684.  
  2685. nodrawp2:
  2686.  
  2687. ***************************************** 
  2688. * Copy from copbuff to chip ram
  2689.  
  2690.  
  2691. ; move.l drawpt,a3
  2692. ; adda.w #10,a3
  2693. ; move.l COPSCRNBUFF,a2
  2694. ; move.w #2,d6
  2695. ; adda.w #10,a2
  2696. ;COPYOUT
  2697. ; move.w #31,d0
  2698. ;COPYDOWN1:
  2699. ; move.w #3,d1
  2700. ; move.l a2,a4
  2701. ; move.l a3,a5
  2702. ;.inlop1:
  2703. ;val SET 0
  2704. ; REPT 20
  2705. ; move.w val(a4),val(a5)
  2706. ;val SET val+104*4
  2707. ; ENDR
  2708. ; adda.l #104*4*20,a4
  2709. ; adda.l #104*4*20,a5
  2710. ; dbra d1,.inlop1
  2711. ; addq #4,a2
  2712. ; addq #4,a3
  2713. ; dbra d0,COPYDOWN1
  2714. ; addq #4,a2
  2715. ; addq #4,a3
  2716. ; dbra d6,COPYOUT 
  2717.  
  2718.  tst.b REALMAPON
  2719.  beq.s .nomap
  2720.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2721. .nomap
  2722.  
  2723.  move.w WIDESCRN,d7
  2724.  
  2725.  tst.b FULLSCR
  2726.  beq nobigconv
  2727.  
  2728.  move.l FASTBUFFER,a0
  2729. ; add.l #320*2*20,a0
  2730.  move.w d7,d6
  2731.  muls #320,d6
  2732.  add.l d6,a0
  2733.  move.l SCRNDRAWPT,a1
  2734.  move.w d7,d6
  2735.  muls #40,d6
  2736.  add.l d6,a1
  2737.  add.l #2,a1
  2738.  move.l #(288/8)-1,d0
  2739.  move.l #231,d1
  2740.  sub.w d7,d1
  2741.  sub.w d7,d1
  2742.  blt nochunk
  2743.  move.w #(320-288),d2
  2744.  move.w #4,d3
  2745.  
  2746.  bra donebigconv
  2747.  
  2748. nobigconv:
  2749.  
  2750.  move.l FASTBUFFER,a0
  2751.  move.w d7,d6
  2752.  muls #320,d6
  2753.  add.l d6,a0
  2754.  move.l SCRNDRAWPT,a1
  2755.  add.l #8+40*20,a1
  2756.  move.w d7,d6
  2757.  muls #40,d6
  2758.  add.l d6,a1
  2759.  move.l #(192/8)-1,d0
  2760.  move.l #159,d1
  2761.  sub.w d7,d1
  2762.  sub.w d7,d1
  2763.  blt nochunk
  2764.  move.w #(320-192),d2
  2765.  move.w #16,d3
  2766. donebigconv
  2767.  
  2768.  tst.b DOUBLEHEIGHT
  2769.  beq.s .nodoub
  2770.  asr.w #1,d1
  2771.  blt nochunk
  2772.  add.w #320,d2
  2773.  add.w #40,d3
  2774. .nodoub:
  2775.  
  2776.  move.b DOUBLEWIDTH,d4
  2777.  
  2778.  move.b PLR1_TELEPORTED,d5
  2779.  clr.b PLR1_TELEPORTED
  2780.  cmp.b #'s',mors
  2781.  bne.s .notplr2
  2782.  move.b PLR2_TELEPORTED,d5
  2783.  clr.b PLR2_TELEPORTED
  2784. .notplr2
  2785.  jsr CHUNKYTOPLANAR 
  2786.  
  2787. nochunk:
  2788.  
  2789.  
  2790.  move.l #KeyMap,a5
  2791.  tst.b $4a(a5)
  2792.  beq .nosmallscr
  2793.  
  2794.  move.w #100,d2
  2795.  move.l #0,d7
  2796.  move.l #0,d6
  2797.  tst.b FULLSCR
  2798.  bne.s .attop
  2799.  move.l #40*20,d7
  2800.  move.l #40*52,d6
  2801.  move.w #60,d2
  2802. .attop:
  2803.  
  2804.  move.w WIDESCRN,d0
  2805.  move.l SCRNDRAWPT,a0
  2806.  add.l d7,a0
  2807.  muls #40,d0
  2808.  add.l d0,a0
  2809.  bsr CLRTWOLINES
  2810.  move.w WIDESCRN,d0
  2811.  move.l SCRNSHOWPT,a0
  2812.  add.l d7,a0
  2813.  muls #40,d0
  2814.  add.l d0,a0
  2815.  bsr CLRTWOLINES
  2816.  
  2817.  
  2818.  add.w #2,WIDESCRN
  2819.  
  2820.  cmp.w WIDESCRN,d2
  2821.  bgt.s .okwide
  2822.  move.w d2,WIDESCRN
  2823. .okwide:
  2824.  
  2825.  move.l SCRNDRAWPT,a0
  2826.  add.l #232*40,a0
  2827.  sub.l d6,a0
  2828.  move.w WIDESCRN,d0
  2829.  muls #40,d0
  2830.  sub.l d0,a0
  2831.  bsr CLRTWOLINES
  2832.  move.l SCRNSHOWPT,a0
  2833.  sub.l d6,a0
  2834.  add.l #232*40,a0
  2835.  move.w WIDESCRN,d0
  2836.  muls #40,d0
  2837.  sub.l d0,a0
  2838.  bsr CLRTWOLINES
  2839.  
  2840. .nosmallscr
  2841.  
  2842.  tst.b $5e(a5)
  2843.  beq.s .nobigscr
  2844.  tst.w WIDESCRN
  2845.  ble.s .nobigscr
  2846.  
  2847.  sub.w #2,WIDESCRN
  2848.  
  2849. .nobigscr
  2850.  
  2851.  
  2852.  tst.b (a5)
  2853.  beq.s .nosavescrn
  2854.  
  2855.  not.b USEDOUG
  2856.  
  2857.  jsr SAVETHESCREEN
  2858.  
  2859. .nosavescrn:
  2860.  
  2861.  tst.b $5b(a5)
  2862.  beq notdoubheight
  2863.  tst.b LASTDH
  2864.  bne notdoubheight2
  2865.  move.l SCRNSHOWPT,a0
  2866.  jsr WIPEDISPLAY
  2867.  move.l SCRNDRAWPT,a0
  2868.  jsr WIPEDISPLAY
  2869.  st LASTDH 
  2870.  
  2871.  move.w #0,d0
  2872.  move.w #0,d1
  2873.  
  2874.  not.b DOUBLEHEIGHT
  2875.  beq.s singlepixheight
  2876.  move.w #-40,d0
  2877.  move.w #40,d1
  2878.  
  2879. singlepixheight:
  2880.  
  2881.  move.l #SCRMODULOS,a0
  2882.  move.w #115,d2
  2883. putinmode:
  2884.  move.w d0,6(a0)
  2885.  move.w d0,6+4(a0)
  2886.  move.w d1,6+16(a0)
  2887.  move.w d1,6+16+4(a0)
  2888.  add.w #32,a0
  2889.  dbra d2,putinmode
  2890.  
  2891.  bra notdoubheight2
  2892.  
  2893. notdoubheight:
  2894.  clr.b LASTDH
  2895. notdoubheight2
  2896.  
  2897.  tst.b $5a(a5)
  2898.  beq.s notdoubwidth
  2899.  tst.b LASTDW
  2900.  bne notdoubwidth2
  2901.  move.l SCRNSHOWPT,a0
  2902.  jsr WIPEDISPLAY
  2903.  move.l SCRNDRAWPT,a0
  2904.  jsr WIPEDISPLAY
  2905.  st LASTDW
  2906.  not.b DOUBLEWIDTH
  2907.  bra.s notdoubwidth2
  2908.  
  2909. notdoubwidth:
  2910.  clr.b LASTDW
  2911. notdoubwidth2:
  2912.  
  2913. ***************************************** 
  2914.  move.l PLR2_Roompt,a0
  2915.  move.l #WorkSpace,a1
  2916.  clr.l (a1)
  2917.  clr.l 4(a1)
  2918.  clr.l 8(a1)
  2919.  clr.l 12(a1)
  2920.  clr.l 16(a1)
  2921.  clr.l 20(a1)
  2922.  clr.l 24(a1)
  2923.  clr.l 28(a1)
  2924.  
  2925.  cmp.b #'n',mors
  2926.  beq.s plr1only
  2927.  
  2928.  lea ToListOfGraph(a0),a0
  2929. .doallrooms:
  2930.  move.w (a0),d0
  2931.  blt.s .allroomsdone
  2932.  addq #8,a0
  2933.  move.w d0,d1
  2934.  asr.w #3,d0
  2935.  bset d1,(a1,d0.w)
  2936.  bra .doallrooms
  2937. .allroomsdone:
  2938.  
  2939. plr1only:
  2940.  
  2941.  move.l PLR1_Roompt,a0
  2942.  lea ToListOfGraph(a0),a0
  2943. .doallrooms2:
  2944.  move.w (a0),d0
  2945.  blt.s .allroomsdone2
  2946.  addq #8,a0
  2947.  move.w d0,d1
  2948.  asr.w #3,d0
  2949.  bset d1,(a1,d0.w)
  2950.  bra .doallrooms2
  2951. .allroomsdone2:
  2952.  
  2953.  move.l #%000001,d7
  2954.  lea TEAMWORK,a2
  2955.  move.l ObjectData,a0
  2956.  sub.w #64,a0
  2957. .doallobs:
  2958.  add.w #64,a0
  2959.  move.w (a0),d0
  2960.  blt.s .allobsdone
  2961.  move.w 12(a0),d0
  2962.  blt.s .doallobs
  2963.  move.w d0,d1
  2964.  asr.w #3,d0
  2965.  btst d1,(a1,d0.w)
  2966.  bne.s .worryobj
  2967.  move.b 16(a0),d0
  2968.  btst d0,d7
  2969.  beq.s .doallobs
  2970.  moveq #0,d0
  2971.  move.b teamnumber(a0),d0
  2972.  blt.s .doallobs
  2973.  asl.w #4,d0
  2974.  tst.w SEENBY(a2,d0.w)
  2975.  blt.s .doallobs
  2976. .worryobj:
  2977.  or.b #127,worry(a0)
  2978.  bra.s .doallobs
  2979. .allobsdone:
  2980.  
  2981.  
  2982.  
  2983. ; move.l #brightentab,a0
  2984. ; move.l frompt,a3
  2985. ; adda.w #(4*33)+(104*4*20),a3
  2986. ; move.w #20,d7
  2987. ; move.w #20,d6
  2988. ;horl:
  2989. ; move.w d6,d5
  2990. ; move.l a3,a1
  2991. ;vertl
  2992. ; move.w (a1),d0
  2993. ; move.w (a0,d0.w*2),(a1)
  2994. ; addq #4,a1
  2995. ; dbra d5,vertl
  2996. ; adda.w #104*4,a3
  2997. ; dbra d7,horl
  2998.  
  2999.  move.l #$dff000,a6
  3000.  
  3001. ; move.w #$300,col0(a6)
  3002.  
  3003.  move.l #KeyMap,a5
  3004.  tst.b $45(a5)
  3005.  beq.s noend
  3006.  
  3007.  cmp.b #'s',mors
  3008.  beq plr2quit 
  3009.  
  3010.  st MASTERQUITTING
  3011.  bra noend
  3012.  
  3013. plr2quit:
  3014.  st SLAVEQUITTING
  3015. noend:
  3016.  
  3017.  tst.b MASTERQUITTING
  3018.  beq.s .noquit
  3019.  tst.b SLAVEQUITTING
  3020.  beq.s .noquit
  3021.  jmp endnomusic
  3022. .noquit
  3023.  
  3024.  cmp.b #'n',mors
  3025.  bne.s noexit
  3026.  move.l PLR1_Roompt,a0
  3027.  move.w (a0),d0
  3028. ; move.w PLOPT,d1
  3029. ; move.l #ENDZONES,a0
  3030. ; cmp.w (a0,d1.w*2),d0
  3031.  
  3032.  cmp.w ENDZONE,d0
  3033.  
  3034. ; change this for quick exit, charlie
  3035. zzzz:
  3036. ; bra end
  3037.  
  3038.  bne.s noexit
  3039.  add.w #2,TELVAL
  3040.  cmp.w #9,TELVAL
  3041.  blt noexit
  3042.  
  3043.  jmp end
  3044. noexit:
  3045.  
  3046. ; tst.w PLAYERONEHEALTH
  3047. ; bgt nnoend1
  3048. ; jmp end
  3049. ;nnoend1:
  3050. ; tst.w PLAYERTWOHEALTH
  3051. ; bgt nnoend2
  3052. ; jmp end
  3053. ;nnoend2:
  3054.  
  3055. ; move.l SwitchData,a0
  3056. ; tst.b 24+8(a0)
  3057. ; bne end
  3058.   
  3059. ; JSR STOPTIMER
  3060.  
  3061.  
  3062.  bra lop
  3063.  
  3064.  
  3065.  
  3066.  include "ab3:source_4000/ab3diipatchidr.s"
  3067.  
  3068. CLRTWOLINES:
  3069.  
  3070.  move.l d2,-(a7)
  3071.  
  3072.  moveq #0,d1
  3073.  move.w #7,d2
  3074. .ccc
  3075.  move.l d1,2(a0)
  3076.  move.l d1,6(a0)
  3077.  move.l d1,10(a0)
  3078.  move.l d1,14(a0)
  3079.  move.l d1,18(a0)
  3080.  move.l d1,22(a0)
  3081.  move.l d1,26(a0)
  3082.  move.l d1,30(a0)
  3083.  move.l d1,34(a0)
  3084.  move.l d1,2+40(a0)
  3085.  move.l d1,6+40(a0)
  3086.  move.l d1,10+40(a0)
  3087.  move.l d1,14+40(a0)
  3088.  move.l d1,18+40(a0)
  3089.  move.l d1,22+40(a0)
  3090.  move.l d1,26+40(a0)
  3091.  move.l d1,30+40(a0)
  3092.  move.l d1,34+40(a0)
  3093.  add.l #10240,a0
  3094.  dbra d2,.ccc
  3095.  move.l (a7)+,d2
  3096.  rts
  3097.  
  3098.  
  3099. LASTDH: dc.b 0
  3100. LASTDW: dc.b 0
  3101. WIDESCRN: dc.w 0
  3102. TRRANS: dc.w 0
  3103. DOANYWATER: dc.w 0
  3104.  
  3105. DoTheMapWotNastyCharlesIsForcingMeToDo:
  3106.  
  3107.  move.l TexturePal,a4
  3108.  add.l #256*32,a4
  3109. ; add.w MAPBRIGHT,a4
  3110.  
  3111.  move.l #KeyMap,a5
  3112.  tst.b $50(a5)
  3113.  beq.s .nobrighter
  3114.  tst.w MAPBRIGHT
  3115.  beq.s .nobrighter
  3116.  
  3117.  sub.w #1,MAPBRIGHT
  3118.  
  3119. .nobrighter:
  3120.  
  3121.  tst.b $51(a5)
  3122.  beq.s .nodimmer
  3123.  cmp.w #7,MAPBRIGHT
  3124.  bge.s .nodimmer
  3125.  
  3126.  add.w #1,MAPBRIGHT
  3127.  
  3128. .nodimmer:
  3129.  
  3130.  move.l #Rotated,a1
  3131.  move.l #COMPACTMAP,a2
  3132.  move.l #BIGMAP-40,a3
  3133.  
  3134. preshow:
  3135.  add.w #40,a3
  3136.  
  3137. SHOWMAP:
  3138.  move.l (a2)+,d5
  3139.  move.l a2,d7
  3140.  cmp.l LASTZONE,d7
  3141.  bgt shownmap
  3142.  
  3143.  tst.l d5
  3144.  beq.s preshow
  3145.  
  3146.  move.w #9,d7
  3147. wallsofzone
  3148.  
  3149.  asr.l #1,d5
  3150.  bcs.s WALLSEEN
  3151.  
  3152.  asr.l #1,d5
  3153.  bcs.s WALLMAPPED
  3154.  
  3155.  asr.l #1,d5
  3156.  addq #4,a3
  3157.  bra.s DECIDEDWALL
  3158.  
  3159. WALLMAPPED:
  3160.  move.w #$b00,d4
  3161.  asr.l #1,d5
  3162.  bcc.s .notadoor
  3163.  move.w #$e00,d4
  3164. .notadoor
  3165.  
  3166.  st TRRANS
  3167.  
  3168.  bra.s DECIDEDCOLOUR
  3169.  
  3170. WALLSEEN:
  3171.  
  3172.  clr.b TRRANS
  3173.  
  3174.  move.w #255,d4
  3175.  asr.l #2,d5
  3176.  bcc.s .notadoor
  3177.  move.w #254,d4
  3178. .notadoor
  3179. DECIDEDCOLOUR:
  3180.  move.w (a3)+,d6
  3181.  move.l (a1,d6.w*8),d0
  3182.  asr.l #7,d0
  3183.  movem.l d7/d5,-(a7)
  3184.  move.w mapxoff,d5
  3185.  ext.l d5
  3186.  add.l d5,d0
  3187.  move.l 4(a1,d6.w*8),d1
  3188.  move.w mapzoff,d5
  3189.  ext.l d5
  3190.  add.l d5,d1
  3191.  move.w (a3)+,d6
  3192.  move.l (a1,d6.w*8),d2
  3193.  move.w mapxoff,d5
  3194.  ext.l d5
  3195.  asr.l #7,d2
  3196.  add.l d5,d2
  3197.  move.l 4(a1,d6.w*8),d3
  3198.  move.w mapzoff,d5
  3199.  ext.l d5
  3200.  add.l d5,d3
  3201.  
  3202.  neg.l d1
  3203.  neg.l d3
  3204.  
  3205.  bsr CLIPANDDRAW
  3206.  movem.l (a7)+,d7/d5
  3207.  
  3208. DECIDEDWALL:
  3209.  
  3210.  dbra d7,wallsofzone
  3211.  bra SHOWMAP
  3212.  
  3213. shownmap:
  3214.  
  3215.  clr.b TRRANS
  3216.  
  3217.  move.w mapxoff,d0
  3218.  ext.l d0
  3219.  move.w mapzoff,d1
  3220.  ext.l d1
  3221.  neg.l d1
  3222.  move.l d0,d2
  3223.  move.l d1,d3
  3224.  sub.l #128,d1
  3225.  add.l #128,d3
  3226.  move.w #250,d4
  3227.  bsr CLIPANDDRAW
  3228.  
  3229.  move.w mapxoff,d0
  3230.  ext.l d0
  3231.  move.w mapzoff,d1
  3232.  ext.l d1
  3233.  neg.l d1
  3234.  move.l d0,d2
  3235.  move.l d1,d3
  3236.  sub.l #128,d1
  3237.  sub.l #32,d3
  3238.  sub.l #64,d2
  3239.  move.w #250,d4
  3240.  bsr CLIPANDDRAW
  3241.  
  3242.  move.w mapxoff,d0
  3243.  ext.l d0
  3244.  move.w mapzoff,d1
  3245.  ext.l d1
  3246.  neg.l d1
  3247.  move.l d0,d2
  3248.  move.l d1,d3
  3249.  sub.l #128,d1
  3250.  sub.l #32,d3
  3251.  add.l #64,d2
  3252.  move.w #250,d4
  3253.  bsr CLIPANDDRAW
  3254.  rts
  3255.  
  3256.  
  3257. CLIPANDDRAW:
  3258.  
  3259.  tst.b FULLSCR
  3260.  beq.s .nodov
  3261.  
  3262.  add.l d0,d0
  3263.  add.l d2,d2
  3264.  ext.l d0
  3265.  ext.l d2
  3266.  divs.l #3,d0
  3267.  divs.l #3,d2
  3268.  
  3269. .nodov:
  3270.  
  3271.  move.w MAPBRIGHT,d5
  3272.  asr.l d5,d0
  3273.  asr.l d5,d1
  3274.  asr.l d5,d2
  3275.  asr.l d5,d3
  3276.  
  3277. NOSCALING:
  3278.  add.l #96,d0
  3279.  bge p1xpos
  3280.  
  3281.  add.l #96,d2
  3282.  blt OFFSCREEN
  3283.  
  3284. x1nx2p:
  3285.  
  3286.  move.l d3,d5
  3287.  sub.l d1,d5
  3288.  move.l d2,d6
  3289.  sub.l d0,d6
  3290.  beq OFFSCREEN
  3291.  
  3292.  muls.l d0,d5
  3293.  divs.l d6,d5
  3294.  sub.l d5,d1
  3295.  move.l #0,d0
  3296.  
  3297.  bra doneleftclip
  3298.  
  3299. p1xpos:
  3300.  
  3301.  add.l #96,d2
  3302.  bge doneleftclip
  3303.  
  3304.  move.l d1,d5
  3305.  sub.l d3,d5
  3306.  move.l d0,d6
  3307.  sub.l d2,d6
  3308.  beq OFFSCREEN
  3309.  
  3310.  muls.l d2,d5
  3311.  divs.l d6,d5
  3312.  sub.l d5,d3
  3313.  move.l #0,d2
  3314.  
  3315. doneleftclip:
  3316.  
  3317.  cmp.l #191,d0
  3318.  ble p1xneg
  3319.  
  3320.  cmp.l #191,d2
  3321.  bgt OFFSCREEN
  3322.  
  3323.  move.l d0,d6
  3324.  sub.l d2,d6
  3325.  beq OFFSCREEN
  3326.  sub.l #191,d0
  3327.  move.l d3,d5
  3328.  sub.l d1,d5
  3329.  
  3330.  muls.l d5,d0
  3331.  divs.l d6,d0
  3332.  add.l d0,d1
  3333.  move.l #191,d0
  3334.  
  3335.  bra donerightclip
  3336.  
  3337. p1xneg:
  3338.  
  3339.  cmp.l #191,d2
  3340.  ble donerightclip
  3341.  
  3342.  move.l d2,d6
  3343.  sub.l d0,d6
  3344.  beq OFFSCREEN
  3345.  sub.l #191,d2
  3346.  move.l d1,d5
  3347.  sub.l d3,d5
  3348.  
  3349.  muls.l d5,d2
  3350.  divs.l d6,d2
  3351.  add.l d2,d3
  3352.  move.l #191,d2
  3353.  
  3354. donerightclip:
  3355.  
  3356. *********************************
  3357.  
  3358.  add.l #80,d1
  3359.  bge p1ypos
  3360.  
  3361.  add.l #80,d3
  3362.  blt OFFSCREEN
  3363.  
  3364.  move.l d2,d5
  3365.  sub.l d0,d5
  3366.  move.l d3,d6
  3367.  sub.l d1,d6
  3368.  beq OFFSCREEN
  3369.  
  3370.  muls.l d1,d5
  3371.  divs.l d6,d5
  3372.  sub.l d5,d0
  3373.  move.l #0,d1
  3374.  
  3375.  bra donetopclip
  3376.  
  3377. p1ypos:
  3378.  
  3379.  add.l #80,d3
  3380.  bge donetopclip
  3381.  
  3382.  move.l d0,d5
  3383.  sub.l d2,d5
  3384.  move.l d1,d6
  3385.  sub.l d3,d6
  3386.  beq OFFSCREEN
  3387.  
  3388.  muls.l d3,d5
  3389.  divs.l d6,d5
  3390.  sub.l d5,d2
  3391.  move.l #0,d3
  3392.  
  3393. donetopclip:
  3394.  
  3395.  cmp.l #159,d1
  3396.  ble p1yneg
  3397.  
  3398.  cmp.l #159,d3
  3399.  bgt OFFSCREEN
  3400.  
  3401.  move.l d1,d6
  3402.  sub.l d3,d6
  3403.  beq OFFSCREEN
  3404.  sub.l #159,d1
  3405.  move.l d2,d5
  3406.  sub.l d0,d5
  3407.  
  3408.  muls.l d5,d1
  3409.  divs.l d6,d1
  3410.  add.l d1,d0
  3411.  move.l #159,d1
  3412.  
  3413.  bra donebotclip
  3414.  
  3415. p1yneg:
  3416.  
  3417.  cmp.l #159,d3
  3418.  ble donebotclip
  3419.  
  3420.  move.l d3,d6
  3421.  sub.l d1,d6
  3422.  beq OFFSCREEN
  3423.  sub.l #159,d3
  3424.  move.l d0,d5
  3425.  sub.l d2,d5
  3426.  
  3427.  muls.l d5,d3
  3428.  divs.l d6,d3
  3429.  add.l d3,d2
  3430.  move.l #159,d3
  3431.  
  3432. donebotclip:
  3433.  
  3434.  tst.b TRRANS
  3435.  bne DRAWAtransLINE
  3436.  bra DRAWAMAPLINE
  3437.  
  3438. OFFSCREEN:
  3439. NOLINEtrans:
  3440.  rts
  3441.  
  3442. MAPBRIGHT:
  3443.  dc.w 3
  3444. mapxoff: dc.w 0
  3445. mapzoff: dc.w 0
  3446.  
  3447. DRAWAtransLINE:
  3448.  
  3449.  move.l FASTBUFFER,a0    ; screen to render to.
  3450.  
  3451.  tst.b FULLSCR
  3452.  beq.s .nooffset
  3453.   
  3454.  add.l #(320*40)+(48*2),a0
  3455.   
  3456. .nooffset:
  3457.  
  3458.  cmp.w d1,d3
  3459.  bgt.s .okdown
  3460.  bne.s .aline
  3461.  cmp.w d0,d2
  3462.  beq.s NOLINEtrans 
  3463. .aline
  3464.  exg d0,d2
  3465.  exg d1,d3
  3466. .okdown
  3467.  
  3468.  move.w d1,d5
  3469.  muls #320,d5
  3470.  add.l d5,a0
  3471.  lea (a0,d0.w*2),a0
  3472.  
  3473.  sub.w d1,d3
  3474.  
  3475.  sub.w d0,d2
  3476.  bge.s downrighttrans
  3477.  
  3478. downlefttrans:
  3479.  neg.w d2
  3480.  cmp.w d2,d3
  3481.  bgt.s downmorelefttrans
  3482.  
  3483. downleftmoretrans:
  3484.  move.w #320,d6
  3485.  move.w d2,d0
  3486.  move.w d2,d7
  3487.  
  3488. .linelop:
  3489.  move.b (a0),d4
  3490.  move.b (a4,d4.w*2),(a0)
  3491.  subq #1,a0
  3492.  sub.w d3,d0
  3493.  bgt.s .noextra
  3494.  add.w d2,d0
  3495.  add.w d6,a0
  3496. .noextra:
  3497.  dbra d7,.linelop
  3498.  rts
  3499.  
  3500. downmorelefttrans:
  3501.  move.w #320,d6
  3502.  move.w d3,d0
  3503.  move.w d3,d7
  3504.  
  3505. .linelop:
  3506.  move.b (a0),d4
  3507.  move.b (a4,d4.w*2),(a0)
  3508.  add.w d6,a0
  3509.  sub.w d2,d0
  3510.  bgt.s .noextra
  3511.  add.w d3,d0
  3512.  subq #1,a0
  3513. .noextra:
  3514.  dbra d7,.linelop
  3515.  
  3516.  rts
  3517.  
  3518. downrighttrans:
  3519.  
  3520.  cmp.w d2,d3
  3521.  bgt.s downmorerighttrans
  3522.  
  3523. downrightmoretrans:
  3524.  move.w #320,d6
  3525.  move.w d2,d0
  3526.  move.w d2,d7
  3527.  
  3528. .linelop:
  3529.  move.b (a0),d4
  3530.  move.b (a4,d4.w*2),(a0)+
  3531.  sub.w d3,d0
  3532.  bgt.s .noextra
  3533.  add.w d2,d0
  3534.  add.w d6,a0
  3535. .noextra:
  3536.  dbra d7,.linelop
  3537.  
  3538.  rts
  3539.  
  3540. downmorerighttrans:
  3541.  move.w #320,d6
  3542.  move.w d3,d0
  3543.  move.w d3,d7
  3544.  
  3545. .linelop:
  3546.  move.b (a0),d4
  3547.  move.b (a4,d4.w*2),(a0)
  3548.  add.w d6,a0
  3549.  sub.w d2,d0
  3550.  bgt.s .noextra
  3551.  add.w d3,d0
  3552.  addq #1,a0
  3553. .noextra:
  3554.  dbra d7,.linelop
  3555.  
  3556.  rts
  3557.  
  3558. NOLINE:
  3559.  rts
  3560.  
  3561. DRAWAMAPLINE:
  3562.  
  3563.  
  3564.  move.b DOUBLEHEIGHT,d5
  3565.  or.b DOUBLEWIDTH,d5
  3566.  tst.b d5
  3567.  bne DOITFAT
  3568.  
  3569.  move.l FASTBUFFER,a0    ; screen to render to.
  3570.  cmp.w d1,d3
  3571.  bgt.s .okdown
  3572.  bne.s .aline
  3573.  cmp.w d0,d2
  3574.  beq.s NOLINE 
  3575. .aline
  3576.  exg d0,d2
  3577.  exg d1,d3
  3578. .okdown
  3579.  
  3580.  move.w d1,d5
  3581.  muls #320,d5
  3582.  add.l d5,a0
  3583.  lea (a0,d0.w),a0
  3584.  
  3585.  sub.w d1,d3
  3586.  
  3587.  sub.w d0,d2
  3588.  bge.s downright
  3589.  
  3590. downleft:
  3591.  neg.w d2
  3592.  cmp.w d2,d3
  3593.  bgt.s downmoreleft
  3594.  
  3595. downleftmore:
  3596.  move.w #320,d6
  3597.  move.w d2,d0
  3598.  move.w d2,d7
  3599.  addq #1,a0
  3600.  
  3601. .linelop
  3602.  move.b d4,-(a0)
  3603.  sub.w d3,d0
  3604.  bgt.s .noextra
  3605.  add.w d2,d0
  3606.  add.w d6,a0
  3607. .noextra:
  3608.  dbra d7,.linelop
  3609.  rts
  3610.  
  3611. downmoreleft:
  3612.  move.w #320,d6
  3613.  move.w d3,d0
  3614.  move.w d3,d7
  3615.  
  3616. .linelop:
  3617.  move.b d4,(a0)
  3618.  add.w d6,a0
  3619.  sub.w d2,d0
  3620.  bgt.s .noextra
  3621.  add.w d3,d0
  3622.  subq #1,a0
  3623. .noextra:
  3624.  dbra d7,.linelop
  3625.  
  3626.  rts
  3627.  
  3628. downright:
  3629.  
  3630.  cmp.w d2,d3
  3631.  bgt.s downmoreright
  3632.  
  3633. downrightmore:
  3634.  move.w #320,d6
  3635.  move.w d2,d0
  3636.  move.w d2,d7
  3637.  
  3638. .linelop:
  3639.  move.b d4,(a0)+
  3640.  sub.w d3,d0
  3641.  bgt.s .noextra
  3642.  add.w d2,d0
  3643.  add.w d6,a0
  3644. .noextra:
  3645.  dbra d7,.linelop
  3646.  
  3647.  rts
  3648.  
  3649. downmoreright:
  3650.  move.w #320,d6
  3651.  move.w d3,d0
  3652.  move.w d3,d7
  3653.  
  3654. .linelop:
  3655.  move.b d4,(a0)
  3656.  add.w d6,a0
  3657.  sub.w d2,d0
  3658.  bgt.s .noextra
  3659.  add.w d3,d0
  3660.  addq #1,a0
  3661. .noextra:
  3662.  dbra d7,.linelop
  3663.  
  3664.  rts
  3665.  
  3666.  
  3667. DOITFAT:
  3668.  move.l FASTBUFFER,a0    ; screen to render to.
  3669.  cmp.w d1,d3
  3670.  bgt.s .okdown
  3671.  bne.s .aline
  3672.  cmp.w d0,d2
  3673.  beq NOLINE 
  3674. .aline
  3675.  exg d0,d2
  3676.  exg d1,d3
  3677. .okdown
  3678.  
  3679.  move.w d1,d5
  3680.  muls #320,d5
  3681.  add.l d5,a0
  3682.  lea (a0,d0.w),a0
  3683.  
  3684.  sub.w d1,d3
  3685.  
  3686.  sub.w d0,d2
  3687.  bge.s downrightFAT
  3688.  
  3689. downleftFAT:
  3690.  neg.w d2
  3691.  cmp.w d2,d3
  3692.  bgt.s downmoreleftFAT
  3693.  
  3694. downleftmoreFAT:
  3695.  move.w #320,d6
  3696.  move.w d2,d0
  3697.  move.w d2,d7
  3698.  addq #1,a0
  3699.  
  3700. .linelop
  3701.  move.b d4,319(a0)
  3702.  move.b d4,(a0)
  3703.  move.b d4,-(a0)
  3704.  sub.w d3,d0
  3705.  bgt.s .noextra
  3706.  add.w d2,d0
  3707.  add.w d6,a0
  3708. .noextra:
  3709.  dbra d7,.linelop
  3710.  rts
  3711.  
  3712. downmoreleftFAT:
  3713.  move.w #320,d6
  3714.  move.w d3,d0
  3715.  move.w d3,d7
  3716.  
  3717. .linelop:
  3718.  move.b d4,320(a0)
  3719.  move.b d4,1(a0)
  3720.  move.b d4,(a0)
  3721.  add.w d6,a0
  3722.  sub.w d2,d0
  3723.  bgt.s .noextra
  3724.  add.w d3,d0
  3725.  subq #1,a0
  3726. .noextra:
  3727.  dbra d7,.linelop
  3728.  
  3729.  rts
  3730.  
  3731. downrightFAT:
  3732.  
  3733.  cmp.w d2,d3
  3734.  bgt.s downmorerightFAT
  3735.  
  3736. downrightmoreFAT:
  3737.  move.w #320,d6
  3738.  move.w d2,d0
  3739.  move.w d2,d7
  3740.  
  3741. .linelop:
  3742.  move.b d4,320(a0)
  3743.  move.b d4,(a0)+
  3744.  move.b d4,(a0)
  3745.  sub.w d3,d0
  3746.  bgt.s .noextra
  3747.  add.w d2,d0
  3748.  add.w d6,a0
  3749. .noextra:
  3750.  dbra d7,.linelop
  3751.  
  3752.  rts
  3753.  
  3754. downmorerightFAT:
  3755.  move.w #320,d6
  3756.  move.w d3,d0
  3757.  move.w d3,d7
  3758.  
  3759. .linelop:
  3760.  move.b d4,320(a0)
  3761.  move.b d4,1(a0)
  3762.  move.b d4,(a0)
  3763.  add.w d6,a0
  3764.  sub.w d2,d0
  3765.  bgt.s .noextra
  3766.  add.w d3,d0
  3767.  addq #1,a0
  3768. .noextra:
  3769.  dbra d7,.linelop
  3770.  
  3771.  rts
  3772.  
  3773.  
  3774. SAVETHESCREEN:
  3775.  
  3776.  move.l old,$dff080
  3777.  move.w #$8020,$dff000+intena
  3778.  
  3779.  move.l _IntuitionBase,a6
  3780.  jsr _LVORethinkDisplay(a6)
  3781.  
  3782.  move.l doslib,a6
  3783.  move.l #SAVENAME,d1
  3784.  move.l #1006,d2
  3785.  jsr -30(a6)
  3786.  move.l d0,handle
  3787.  
  3788.  move.l doslib,a6
  3789.  move.l SCRNDRAWPT,d2
  3790.  move.l handle,d1
  3791.  move.l #10240*8,d3
  3792.  jsr _LVOWrite(a6)
  3793.  
  3794.  move.l doslib,a6
  3795.  move.l handle,d1
  3796.  jsr -36(a6)
  3797.  
  3798.  move.l doslib,a6
  3799.  move.l #200,d1
  3800.  jsr -198(a6) 
  3801.  
  3802.  move.w #$0020,$dff000+intena
  3803.  move.l #bigfield,$dff080
  3804.  
  3805.  add.b #1,SAVELETTER
  3806.  
  3807.  rts
  3808.  
  3809. SAVENAME: dc.b 'work:rawscrn'
  3810. SAVELETTER: dc.b 'd',0
  3811.  
  3812.  even
  3813.  
  3814.  include "ab3:source_4000/CHUNKY.s"
  3815.  
  3816.  
  3817. MASTERQUITTING: dc.b 0
  3818. SLAVEQUITTING: dc.b 0
  3819. MASTERPAUSE: dc.b 0
  3820. SLAVEPAUSE: dc.b 0
  3821.  
  3822. PAUSEOPTS:
  3823.  include "ab3:source_4000/pauseopts"
  3824.  
  3825. ENDZONE: dc.w 0
  3826.  
  3827. ENDZONES:
  3828. ; LEVEL 1
  3829.  dc.w -1
  3830. ; dc.w 55
  3831. ; LEVEL 2
  3832.  dc.w 149
  3833. ; LEVEL 3
  3834.  dc.w 155
  3835. ; LEVEL 4
  3836.  dc.w 107
  3837. ; LEVEL 5
  3838.  dc.w 67
  3839. ; LEVEL 6
  3840.  dc.w 132
  3841. ; LEVEL 7
  3842.  dc.w 203
  3843. ; LEVEL 8
  3844.  dc.w 166
  3845. ; LEVEL 9
  3846.  dc.w 118
  3847. ; LEVEL 10
  3848.  dc.w 102
  3849. ; LEVEL 11
  3850.  dc.w 103
  3851. ; LEVEL 12
  3852.  dc.w 2
  3853. ; LEVEL 13
  3854.  dc.w 98
  3855. ; LEVEL 14
  3856.  dc.w 0
  3857. ; LEVEL 15
  3858.  dc.w 148
  3859. ; LEVEL 16
  3860.  dc.w 103
  3861.  
  3862. ***************************************************************************
  3863. ***************************************************************************
  3864. ****************** End of Main Loop here ********************************** 
  3865. ***************************************************************************
  3866. ***************************************************************************
  3867.  
  3868. putinsmallscr:
  3869.  
  3870.  rts
  3871.  
  3872.  move.l #$1fe0000,statskip
  3873.  move.l #$1fe0000,statskip+4
  3874.  
  3875.  move.l #healthpal,a5
  3876. ; move.l COPSCRN1,a0
  3877. ; move.l COPSCRN2,a2
  3878.  move.w #scrheight-1,d0
  3879.  move.l #0,d6
  3880.  move.w #0,d3
  3881.  move.w #$2bdf,startwait
  3882.  move.w #$2d01,endwait
  3883. .fillcop
  3884.  move.w #$180,d1
  3885.  
  3886.  move.l a0,a1
  3887.  move.l a2,a3
  3888.  move.w #$10c,(a1)+
  3889.  move.w #$10c,(a3)+
  3890.  move.w d3,(a1)+
  3891.  move.w d3,(a3)+
  3892.  eor.w #$8000,d3
  3893.  
  3894.  move.w #$106,(a1)+
  3895.  move.w #$106,(a3)+
  3896.  move.w #$2c42,d5
  3897.  or.w d3,d5
  3898.  and.w #$fffe,d5
  3899.  move.w d5,(a1)+
  3900.  move.w d5,(a3)+
  3901.  bsr do32
  3902.  
  3903.  move.w #$106,(a1)+
  3904.  move.w #$106,(a3)+
  3905.  move.w #$4c42,d5
  3906.  or.w d3,d5
  3907.  and.w #$fffe,d5
  3908.  move.w d5,(a1)+
  3909.  move.w d5,(a3)+
  3910.  bsr do32
  3911.  
  3912.  move.w #$106,(a1)+
  3913.  move.w #$106,(a3)+
  3914.  move.w #$6c42,d5
  3915.  or.w d3,d5
  3916.  and.w #$fffe,d5
  3917.  move.w d5,(a1)+
  3918.  move.w d5,(a3)+
  3919.  bsr do32
  3920.  
  3921.  
  3922.  move.l #$1060c42,(a1)+
  3923.  move.l #$1060c42,(a3)+
  3924.  move.w #$19e,(a1)+
  3925.  move.w (a5),(a1)+
  3926.  move.w #$19e,(a3)+
  3927.  move.w (a5)+,(a3)+
  3928.  
  3929. **********************************
  3930.  
  3931.  adda.w #104*4,a0
  3932.  adda.w #104*4,a2
  3933.  dbra d0,.fillcop
  3934.  
  3935.  move.w #$48,fetchstart
  3936.  move.w #$88,fetchstop
  3937.  move.w #$2cb1,winstart
  3938.  move.w #$2c91,winstop
  3939.  move.w #-24,modulo
  3940.  move.w #-24,modulo+4
  3941.  
  3942.  move.l #nullspr,d0
  3943.  move.w d0,s4l
  3944.  move.w d0,s5l
  3945.  move.w d0,s6l
  3946.  move.w d0,s7l
  3947.  swap d0
  3948.  move.w d0,s4h
  3949.  move.w d0,s5h
  3950.  move.w d0,s6h
  3951.  move.w d0,s7h 
  3952.  
  3953. ; move.l #borders,d0
  3954. ; move.w d0,s0l
  3955. ; swap d0
  3956. ; move.w d0,s0h
  3957. ; move.l #borders+2592,d0
  3958. ; move.w d0,s1l
  3959. ; swap d0
  3960. ; move.w d0,s1h
  3961. ; move.l #borders+2592*2,d0
  3962. ; move.w d0,s2l
  3963. ; swap d0
  3964. ; move.w d0,s2h
  3965. ; move.l #borders+2592*3,d0
  3966. ; move.w d0,s3l
  3967. ; swap d0
  3968. ; move.w d0,s3h
  3969.  
  3970.  
  3971.  move.l scrn,a0
  3972.  add.l #40,a0
  3973.  move.l scrn,a1
  3974.  add.l #160,a1
  3975.  move.l scrn,a2
  3976.  add.l #280,a2
  3977.  move.l #smallscrntab,a3
  3978.  move.w #191,d7    ; counter
  3979.  move.w #0,d1    ; xpos
  3980. .plotscrnloop:
  3981.  move.b (a3)+,d0
  3982.  move.w d1,d2
  3983.  asr.w #3,d2
  3984.  move.b d1,d3
  3985.  not.b d3
  3986.  bclr.b d3,-40(a0,d2.w)
  3987.  bclr.b d3,(a0,d2.w)
  3988.  bclr.b d3,40(a0,d2.w)
  3989.  bclr.b d3,-40(a1,d2.w)
  3990.  bclr.b d3,(a1,d2.w)
  3991.  bclr.b d3,40(a1,d2.w)
  3992.  bclr.b d3,-40(a2,d2.w)
  3993.  btst #0,d0
  3994.  beq.s .nobp1
  3995.  bset.b d3,-40(a0,d2.w)
  3996. .nobp1:
  3997.  btst #1,d0
  3998.  beq.s .nobp2
  3999.  bset.b d3,(a0,d2.w)
  4000. .nobp2:
  4001.  btst #2,d0
  4002.  beq.s .nobp3
  4003.  bset.b d3,40(a0,d2.w)
  4004. .nobp3:
  4005.  btst #3,d0
  4006.  beq.s .nobp4
  4007.  bset.b d3,-40(a1,d2.w)
  4008. .nobp4:
  4009.  btst #4,d0
  4010.  beq.s .nobp5
  4011.  bset.b d3,(a1,d2.w)
  4012. .nobp5:
  4013.  btst #5,d0
  4014.  beq.s .nobp6
  4015.  bset.b d3,40(a1,d2.w)
  4016. .nobp6:
  4017.  btst #6,d0
  4018.  beq.s .nobp7
  4019.  bset.b d3,-40(a2,d2.w)
  4020. .nobp7:
  4021.  
  4022.  addq #1,d1
  4023.  
  4024.  dbra d7,.plotscrnloop
  4025.  
  4026.  
  4027.  rts
  4028.  
  4029. putinlargescr:
  4030.  
  4031.  move.l #$1000000,statskip
  4032.  move.l #$fffffffe,statskip+4
  4033.  
  4034.  move.l #healthpal,a5
  4035. ; move.l COPSCRN1,a0
  4036. ; move.l COPSCRN2,a2
  4037.  move.w #scrheight-1,d0
  4038.  move.l #0,d6
  4039.  move.w #0,d3
  4040.  move.w #$29df,startwait
  4041.  move.w #$2b01,endwait
  4042. .fillcop
  4043.  move.w #$180,d1
  4044.  
  4045.  move.l a0,a1
  4046.  move.l a2,a3
  4047.  move.w #$10c,(a1)+
  4048.  move.w #$10c,(a3)+
  4049.  move.w d3,(a1)+
  4050.  move.w d3,(a3)+
  4051.  eor.w #$8000,d3
  4052.  
  4053.  move.w #$106,(a1)+
  4054.  move.w #$106,(a3)+
  4055.  move.w #$2c42,d5
  4056.  or.w d3,d5
  4057.  and.w #$fffe,d5
  4058.  move.w d5,(a1)+
  4059.  move.w d5,(a3)+
  4060.  bsr do32
  4061.  
  4062.  move.w #$106,(a1)+
  4063.  move.w #$106,(a3)+
  4064.  move.w #$4c42,d5
  4065.  or.w d3,d5
  4066.  and.w #$fffe,d5
  4067.  move.w d5,(a1)+
  4068.  move.w d5,(a3)+
  4069.  bsr do32
  4070.  
  4071.  move.w #$106,(a1)+
  4072.  move.w #$106,(a3)+
  4073.  move.w #$6c42,d5
  4074.  or.w d3,d5
  4075.  and.w #$fffe,d5
  4076.  move.w d5,(a1)+
  4077.  move.w d5,(a3)+
  4078.  bsr do32
  4079.  
  4080.  move.w startwait,(a1)+
  4081.  move.w #$fffe,(a1)+
  4082.  move.w endwait,(a1)+
  4083.  move.w #$ff00,(a1)+
  4084.  move.w startwait,(a3)+
  4085.  move.w #$fffe,(a3)+
  4086.  move.w endwait,(a3)+
  4087.  move.w #$ff00,(a3)+
  4088.  
  4089. ; move.l $1fe0000,(a1)+
  4090. ; move.l $1fe0000,(a3)+
  4091. ; move.l $1fe0000,(a1)+
  4092. ; move.l $1fe0000,(a3)+
  4093.  
  4094.  
  4095.  add.w #$300,startwait
  4096.  add.w #$300,endwait
  4097.  
  4098. ; move.l #$1060c42,(a1)+
  4099. ; move.l #$1060c42,(a3)+
  4100. ; move.w #$19e,(a1)+
  4101. ; move.w (a5),(a1)+
  4102. ; move.w #$19e,(a3)+
  4103. ; move.w (a5)+,(a3)+
  4104.  
  4105. **********************************
  4106.  
  4107.  adda.w #104*4,a0
  4108.  adda.w #104*4,a2
  4109.  dbra d0,.fillcop
  4110.  
  4111.  move.w #$38,fetchstart
  4112.  move.w #$b8,fetchstop
  4113.  move.w #$2c81,winstart
  4114.  move.w #$2cc1,winstop
  4115.  move.w #-40,modulo
  4116.  move.w #-40,modulo+4
  4117.  
  4118.  move.l #nullspr,d0
  4119.  move.w d0,s0l
  4120.  move.w d0,s1l
  4121.  move.w d0,s2l
  4122.  move.w d0,s3l
  4123.  move.w d0,s4l
  4124.  move.w d0,s5l
  4125.  move.w d0,s6l
  4126.  move.w d0,s7l
  4127.  swap d0
  4128.  move.w d0,s0h
  4129.  move.w d0,s1h
  4130.  move.w d0,s2h
  4131.  move.w d0,s3h
  4132.  move.w d0,s4h
  4133.  move.w d0,s5h
  4134.  move.w d0,s6h
  4135.  move.w d0,s7h 
  4136.  
  4137.  move.l scrn,a0
  4138.  move.l a0,a1
  4139.  move.l a0,a2
  4140.  add.l #40,a0
  4141.  add.l #160,a1
  4142.  add.l #280,a2
  4143.  move.l #scrntab,a3
  4144.  move.w #319,d7    ; counter
  4145.  move.w #0,d1    ; xpos
  4146. .plotscrnloop:
  4147.  move.b (a3)+,d0
  4148.  move.w d1,d2
  4149.  asr.w #3,d2
  4150.  move.b d1,d3
  4151.  not.b d3
  4152.  bclr.b d3,-40(a0,d2.w)
  4153.  bclr.b d3,(a0,d2.w)
  4154.  bclr.b d3,40(a0,d2.w)
  4155.  bclr.b d3,-40(a1,d2.w)
  4156.  bclr.b d3,(a1,d2.w)
  4157.  bclr.b d3,40(a1,d2.w)
  4158.  bclr.b d3,-40(a2,d2.w)
  4159.  btst #0,d0
  4160.  beq.s .nobp1
  4161.  bset.b d3,-40(a0,d2.w)
  4162. .nobp1:
  4163.  btst #1,d0
  4164.  beq.s .nobp2
  4165.  bset.b d3,(a0,d2.w)
  4166. .nobp2:
  4167.  btst #2,d0
  4168.  beq.s .nobp3
  4169.  bset.b d3,40(a0,d2.w)
  4170. .nobp3:
  4171.  btst #3,d0
  4172.  beq.s .nobp4
  4173.  bset.b d3,-40(a1,d2.w)
  4174. .nobp4:
  4175.  btst #4,d0
  4176.  beq.s .nobp5
  4177.  bset.b d3,(a1,d2.w)
  4178. .nobp5:
  4179.  btst #5,d0
  4180.  beq.s .nobp6
  4181.  bset.b d3,40(a1,d2.w)
  4182. .nobp6:
  4183.  btst #6,d0
  4184.  beq.s .nobp7
  4185.  bset.b d3,-40(a2,d2.w)
  4186. .nobp7:
  4187.  
  4188.  addq #1,d1
  4189.  
  4190.  dbra d7,.plotscrnloop
  4191.  
  4192.  rts
  4193.  
  4194. CLEARKEYBOARD:
  4195.  move.l #KeyMap,a5
  4196.  moveq #0,d0
  4197.  move.w #15,d1
  4198. clrloo:
  4199.  move.l d0,(a5)+
  4200.  move.l d0,(a5)+
  4201.  move.l d0,(a5)+
  4202.  move.l d0,(a5)+
  4203.  dbra d1,clrloo
  4204.  rts
  4205.  
  4206. READCONTROLS: dc.w 0
  4207.  
  4208. tstststst: dc.w 0
  4209.  
  4210. BollocksRoom:
  4211.  dc.w -1
  4212.  ds.l 50
  4213.  
  4214. GUNYOFFS:
  4215.  dc.w 20
  4216.  dc.w 20
  4217.  dc.w 0
  4218.  dc.w 20
  4219.  dc.w 20
  4220.  dc.w 0
  4221.  dc.w 0
  4222.  dc.w 20
  4223.  
  4224. PLR1_BOBBLEY: dc.l 0
  4225. PLR2_BOBBLEY: dc.l 0
  4226.  
  4227. USEPLR1:
  4228.  
  4229. ***********************************
  4230.  
  4231.  move.l PLR1_Obj,a0 
  4232.  move.b #4,16(a0)
  4233.  move.l ObjectPoints,a1
  4234.  move.l #ObjRotated,a2
  4235.  move.w (a0),d0
  4236.  move.l PLR1_xoff,(a1,d0.w*8)
  4237.  move.l PLR1_zoff,4(a1,d0.w*8)
  4238.  move.l PLR1_Roompt,a1
  4239.  
  4240.  moveq #0,d2
  4241.  move.b damagetaken(a0),d2
  4242.  beq .notbeenshot
  4243.  
  4244.  moveq #0,d4
  4245.  move.w ImpactX(a0),d3
  4246.  beq.s .notwist
  4247.  move.w d2,d4
  4248. .notwist:
  4249.  add.w d3,PLR1s_xspdval
  4250.  move.w ImpactZ(a0),d3
  4251.  beq.s .notwist2
  4252.  move.w d2,d4
  4253. .notwist2:
  4254.  add.w d3,PLR1s_zspdval
  4255.  move.w ImpactY(a0),d3
  4256.  ext.l d3
  4257.  asl.l #8,d3
  4258.  add.l d3,PLR1s_yvel
  4259.  
  4260.  move.w #0,ImpactX(a0)
  4261.  move.w #0,ImpactY(a0)
  4262.  move.w #0,ImpactZ(a0)
  4263.  
  4264.  jsr GetRand
  4265.  muls d4,d0
  4266.  asr.l #8,d0
  4267.  asr.l #4,d0
  4268.  add.w d0,PLR1s_angspd
  4269.  
  4270.  move.l #7*2116,hitcol
  4271.  sub.w d2,PLAYERONEHEALTH
  4272.  movem.l d0-d7/a0-a6,-(a7)
  4273.  move.w #$fffa,IDNUM
  4274.  move.w #19,Samplenum
  4275.  clr.b notifplaying
  4276.  move.w #0,Noisex
  4277.  move.w #0,Noisez
  4278.  move.w #60,Noisevol
  4279.  jsr MakeSomeNoise
  4280.  
  4281.  movem.l (a7)+,d0-d7/a0-a6
  4282.  
  4283. .notbeenshot
  4284.  move.b #0,damagetaken(a0)
  4285.  move.b #10,numlives(a0)
  4286.  
  4287.  move.w p1_angpos,Facing(a0)
  4288.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4289.  
  4290.  move.w (a1),12(a0)
  4291.  move.w (a1),d2
  4292.  move.l #ZoneBrightTable,a1
  4293.  move.l (a1,d2.w*4),d2
  4294.  tst.b PLR1_StoodInTop
  4295.  bne.s .okinbott
  4296.  swap d2
  4297. .okinbott:
  4298.  
  4299.  move.w d2,2(a0)
  4300.  
  4301.  
  4302.  move.l p1_yoff,d0
  4303.  move.l p1_height,d1
  4304.  asr.l #1,d1
  4305.  add.l d1,d0
  4306.  asr.l #7,d0
  4307.  move.w d0,4(a0)
  4308.  
  4309. ***********************************
  4310.  
  4311.  move.l PLR2_Obj,a0 
  4312.  move.b #5,16(a0)
  4313.  
  4314.  move.w p2_angpos,d0
  4315.  and.w #8190,d0
  4316.  move.w d0,Facing(a0)
  4317. ; jsr ViewpointToDraw
  4318. ; asl.w #2,d0
  4319. ; moveq #0,d1
  4320. ; move.b p2_bobble,d1
  4321. ; not.b d1
  4322. ; lsr.b #3,d1
  4323. ; and.b #$3,d1
  4324. ; add.w d1,d0
  4325. ; move.w d0,10(a0)
  4326. ; move.w #10,8(a0)
  4327.  
  4328.  move.l ObjectPoints,a1
  4329.  move.l #ObjRotated,a2
  4330.  move.w (a0),d0
  4331.  move.l PLR2_xoff,(a1,d0.w*8)
  4332.  move.l PLR2_zoff,4(a1,d0.w*8)
  4333.  move.l PLR2_Roompt,a1
  4334.  
  4335.  moveq #0,d2
  4336.  move.b damagetaken(a0),d2
  4337.  beq .notbeenshot2
  4338.  move.w ImpactX(a0),d3
  4339.  add.w d3,PLR2s_xspdval
  4340.  move.w ImpactZ(a0),d3
  4341.  add.w d3,PLR2s_zspdval
  4342.  move.w ImpactY(a0),d3
  4343.  ext.l d3
  4344.  asl.l #8,d3
  4345.  add.l d3,PLR2s_yvel
  4346.  
  4347.  move.w #0,ImpactX(a0)
  4348.  move.w #0,ImpactY(a0)
  4349.  move.w #0,ImpactZ(a0)
  4350.  
  4351.  sub.w d2,PLAYERTWOHEALTH
  4352. .notbeenshot2
  4353.  move.b #0,damagetaken(a0)
  4354.  move.b #10,numlives(a0)
  4355.  
  4356.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4357.  
  4358.  move.w (a1),12(a0)
  4359.  move.w (a1),d2
  4360.  move.l #ZoneBrightTable,a1
  4361.  move.l (a1,d2.w*4),d2
  4362.  tst.b PLR2_StoodInTop
  4363.  bne.s .okinbott2
  4364.  swap d2
  4365. .okinbott2:
  4366.  
  4367.  move.w d2,2(a0)
  4368.  
  4369.  move.l p2_yoff,d0
  4370.  move.l p2_height,d1
  4371.  asr.l #1,d1
  4372.  add.l d1,d0
  4373.  asr.l #7,d0
  4374.  move.w d0,4(a0)
  4375.  
  4376.  jsr ViewpointToDraw
  4377.  add.l d0,d0
  4378.  
  4379.  move.l LINKFILE,a6
  4380.  add.l #PLR2ALIEN,a6
  4381.  move.w (a6),d7
  4382.  move.w d7,d1
  4383.  
  4384.  move.l LINKFILE,a6
  4385.  add.l #AlienStats,a6
  4386.  muls #AlienStatLen,d1
  4387.  add.l d1,a6
  4388.  move.b A_GFXType+1(a6),VECOBJ
  4389.  cmp.w #1,A_GFXType(a6)
  4390.  bne.s .NOSIDES2
  4391.  
  4392.  moveq #0,d0
  4393.  
  4394. .NOSIDES2:
  4395.  
  4396.  move.l LINKFILE,a6
  4397.  
  4398.  add.l #AlienAnimData,a6
  4399.  
  4400.  move.w d7,d1
  4401.  muls #A_AnimLen,d1
  4402.  add.l d1,a6
  4403.  
  4404. ; move.l ANIMPOINTER,a6
  4405.  
  4406.  muls #A_OptLen,d0
  4407.  add.w d0,a6
  4408.  
  4409.  move.w SecTimer(a0),d1
  4410.  move.w d1,d2
  4411.  muls #A_FrameLen,d1
  4412.  
  4413.  addq #1,d2
  4414.  
  4415.  move.w d2,d3
  4416.  muls #A_FrameLen,d3
  4417.  tst.b (a6,d3.w)
  4418.  bge.s .noendanim
  4419.  move.w #0,d2
  4420. .noendanim
  4421.  move.w d2,SecTimer(a0)
  4422.  
  4423.  move.w d2,d1
  4424.  
  4425.  muls #A_FrameLen,d1
  4426.  
  4427.  move.l #0,8(a0)
  4428.  move.b (a6,d1.w),9(a0)
  4429.  move.b 1(a6,d1.w),d0
  4430.  ext.w d0
  4431.  bgt.s .noflip
  4432.  move.b #128,10(a0)
  4433.  neg.w d0
  4434. .noflip:
  4435.  sub.w #1,d0
  4436.  move.b d0,11(a0)
  4437.  
  4438.  move.w #-1,6(a0)
  4439.  cmp.b #1,VECOBJ
  4440.  beq.s .nosize
  4441.  bgt.s .setlight
  4442.  move.w 2(a6,d1.w),6(a0)
  4443.  bra.s .ddone
  4444.  
  4445. .nosize
  4446.  
  4447. ; move.l #$00090001,8(a0)
  4448.  
  4449.  bra.s .ddone
  4450.  
  4451. .setlight:
  4452.  move.w 2(a6,d1.w),6(a0)
  4453.  
  4454.  move.b VECOBJ,d1
  4455.  or.b d1,10(a0)
  4456.  
  4457. .ddone:
  4458.  
  4459.  
  4460. **********************************
  4461.  
  4462.  move.l PLR1_Obj,a0
  4463.  
  4464.  ifeq CHEESEY
  4465.  
  4466.  tst.w PLAYERONEHEALTH
  4467.  bgt.s .notdead
  4468.  
  4469.  move.w #-1,12+128(a0)
  4470.  rts
  4471.  
  4472. .notdead: 
  4473.  
  4474.  move.l PLR1_Roompt,a1
  4475.  
  4476.  move.w Facing(a0),d0
  4477.  add.w #4096,d0
  4478.  and.w #8190,d0
  4479.  move.w d0,Facing+128(a0)
  4480.  
  4481.  move.w (a1),12+128(a0)
  4482.  move.w (a1),GraphicRoom+128(a0)
  4483.  
  4484.  moveq #0,d0
  4485.  move.b p1_gunselected,d0
  4486.  
  4487.  move.l LINKFILE,a1
  4488.  add.l #GunObjects,a1
  4489.  move.w (a1,d0.w*2),d0
  4490.  
  4491.  move.b d0,TypeOfThing+128(a0)
  4492.  move.b #1,128+16(a0)
  4493.  
  4494.  move.w (a0),d0
  4495.  move.w 128(a0),d1
  4496.  move.l ObjectPoints,a1
  4497.  move.l (a1,d0.w*8),(a1,d1.w*8)
  4498.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  4499.  
  4500.  st WhichAnim+128(a0)
  4501.  
  4502.  move.l p1_yoff,d0
  4503.  move.l p1_height,d1
  4504.  asr.l #2,d1
  4505.  add.l #10*128,d1
  4506.  add.l d1,d0
  4507.  asr.l #7,d0
  4508.  move.w d0,4+128(a0)
  4509.  move.l PLR1_BOBBLEY,d1
  4510.  asr.l #8,d1
  4511.  move.l d1,d0
  4512.  asr.l #1,d0
  4513.  add.l d0,d1
  4514.  add.w d1,4+128(a0)
  4515.  
  4516.  move.b ObjInTop(a0),ObjInTop+128(a0)
  4517.  
  4518.  endc
  4519.  
  4520.  ifne CHEESEY
  4521.  move.w #-1,12+128(a0)
  4522.  endc
  4523.  
  4524.  rts
  4525.  
  4526. ***************************************************
  4527. **************************************************
  4528.  
  4529. USEPLR2:
  4530.  
  4531. ***********************************
  4532.  
  4533.  move.l PLR2_Obj,a0 
  4534.  move.b #5,16(a0)
  4535.  move.l ObjectPoints,a1
  4536.  move.l #ObjRotated,a2
  4537.  move.w (a0),d0
  4538.  move.l PLR2_xoff,(a1,d0.w*8)
  4539.  move.l PLR2_zoff,4(a1,d0.w*8)
  4540.  move.l PLR2_Roompt,a1
  4541.  
  4542.  moveq #0,d2
  4543.  move.b damagetaken(a0),d2
  4544.  beq .notbeenshot
  4545.  
  4546.  moveq #0,d4
  4547.  move.w ImpactX(a0),d3
  4548.  beq.s .notwist
  4549.  move.w d2,d4
  4550. .notwist:
  4551.  add.w d3,PLR2s_xspdval
  4552.  move.w ImpactZ(a0),d3
  4553.  beq.s .notwist2
  4554.  move.w d2,d4
  4555. .notwist2:
  4556.  add.w d3,PLR2s_zspdval
  4557.  
  4558.  jsr GetRand
  4559.  muls d4,d0
  4560.  asr.l #8,d0
  4561.  asr.l #4,d0
  4562.  add.w d0,PLR2s_angspd
  4563.  
  4564.  move.l #7*2116,hitcol
  4565.  sub.w d2,PLAYERTWOHEALTH
  4566.  movem.l d0-d7/a0-a6,-(a7)
  4567.  move.w #19,Samplenum
  4568.  clr.b notifplaying
  4569.  move.w #$fffa,IDNUM
  4570.  move.w #0,Noisex
  4571.  move.w #0,Noisez
  4572.  move.w #60,Noisevol
  4573.  jsr MakeSomeNoise
  4574.  
  4575.  movem.l (a7)+,d0-d7/a0-a6
  4576.  
  4577. .notbeenshot
  4578.  move.b #0,damagetaken(a0)
  4579.  move.b #10,numlives(a0)
  4580.  
  4581.  move.w p2_angpos,Facing(a0)
  4582.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4583.  
  4584.  move.w (a1),12(a0)
  4585.  move.w (a1),d2
  4586.  move.l #ZoneBrightTable,a1
  4587.  move.l (a1,d2.w*4),d2
  4588.  tst.b PLR2_StoodInTop
  4589.  bne.s .okinbott
  4590.  swap d2
  4591. .okinbott:
  4592.  
  4593.  move.w d2,2(a0)
  4594.  
  4595.  move.l PLR2_yoff,d0
  4596.  move.l p2_height,d1
  4597.  asr.l #1,d1
  4598.  add.l d1,d0
  4599.  asr.l #7,d0
  4600.  move.w d0,4(a0)
  4601.  
  4602. ***********************************
  4603.  
  4604.  move.l PLR1_Obj,a0 
  4605.  move.b #4,16(a0)
  4606.  
  4607.  move.w PLR1_angpos,d0
  4608.  and.w #8190,d0
  4609.  move.w d0,Facing(a0)
  4610. ; jsr ViewpointToDraw
  4611. ; asl.w #2,d0
  4612. ; moveq #0,d1
  4613. ; move.b p2_bobble,d1
  4614. ; not.b d1
  4615. ; lsr.b #3,d1
  4616. ; and.b #$3,d1
  4617. ; add.w d1,d0
  4618. ; move.w d0,10(a0)
  4619. ; move.w #10,8(a0)
  4620.  
  4621.  move.l ObjectPoints,a1
  4622.  move.l #ObjRotated,a2
  4623.  move.w (a0),d0
  4624.  move.l PLR1_xoff,(a1,d0.w*8)
  4625.  move.l PLR1_zoff,4(a1,d0.w*8)
  4626.  move.l PLR1_Roompt,a1
  4627.  
  4628.  moveq #0,d2
  4629.  move.b damagetaken(a0),d2
  4630.  beq .notbeenshot2
  4631.  
  4632.  move.w ImpactX(a0),d3
  4633.  add.w d3,PLR1s_xspdval
  4634.  move.w ImpactZ(a0),d3
  4635.  add.w d3,PLR1s_zspdval
  4636.  
  4637.  sub.w d2,PLAYERONEHEALTH
  4638. .notbeenshot2
  4639.  move.b #0,damagetaken(a0)
  4640.  move.b #10,numlives(a0)
  4641.  
  4642.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4643.  
  4644.  move.w (a1),12(a0)
  4645.  move.w (a1),d2
  4646.  move.l #ZoneBrightTable,a1
  4647.  move.l (a1,d2.w*4),d2
  4648.  tst.b PLR1_StoodInTop
  4649.  bne.s .okinbott2
  4650.  swap d2
  4651. .okinbott2:
  4652.  
  4653.  move.w d2,2(a0)
  4654.  
  4655.  move.l p1_yoff,d0
  4656.  move.l p1_height,d1
  4657.  asr.l #1,d1
  4658.  add.l d1,d0
  4659.  asr.l #7,d0
  4660.  move.w d0,4(a0)
  4661.  
  4662.  jsr ViewpointToDraw
  4663.  add.l d0,d0
  4664.  
  4665.  move.l LINKFILE,a6
  4666.  add.l #PLR1ALIEN,a6
  4667.  move.w (a6),d7
  4668.  move.w d7,d1
  4669.  
  4670.  move.l LINKFILE,a6
  4671.  add.l #AlienStats,a6
  4672.  muls #AlienStatLen,d1
  4673.  add.l d1,a6
  4674.  move.b A_GFXType+1(a6),VECOBJ
  4675.  cmp.w #1,A_GFXType(a6)
  4676.  bne.s .NOSIDES2
  4677.  
  4678.  moveq #0,d0
  4679.  
  4680. .NOSIDES2:
  4681.  
  4682.  move.l LINKFILE,a6
  4683.  
  4684.  add.l #AlienAnimData,a6
  4685.  
  4686.  move.w d7,d1
  4687.  muls #A_AnimLen,d1
  4688.  add.l d1,a6
  4689.  
  4690. ; move.l ANIMPOINTER,a6
  4691.  
  4692.  muls #A_OptLen,d0
  4693.  add.w d0,a6
  4694.  
  4695.  move.w SecTimer(a0),d1
  4696.  move.w d1,d2
  4697.  muls #A_FrameLen,d1
  4698.  
  4699.  addq #1,d2
  4700.  
  4701.  move.w d2,d3
  4702.  muls #A_FrameLen,d3
  4703.  tst.b (a6,d3.w)
  4704.  bge.s .noendanim
  4705.  move.w #0,d2
  4706. .noendanim
  4707.  move.w d2,SecTimer(a0)
  4708.  
  4709.  move.w d2,d1
  4710.  
  4711.  muls #A_FrameLen,d1
  4712.  
  4713.  move.l #0,8(a0)
  4714.  move.b (a6,d1.w),9(a0)
  4715.  move.b 1(a6,d1.w),d0
  4716.  ext.w d0
  4717.  bgt.s .noflip
  4718.  move.b #128,10(a0)
  4719.  neg.w d0
  4720. .noflip:
  4721.  sub.w #1,d0
  4722.  move.b d0,11(a0)
  4723.  
  4724.  move.w #-1,6(a0)
  4725.  cmp.b #1,VECOBJ
  4726.  beq.s .nosize
  4727.  bgt.s .setlight
  4728.  move.w 2(a6,d1.w),6(a0)
  4729.  bra.s .ddone
  4730.  
  4731. .nosize
  4732.  
  4733. ; move.l #$00090001,8(a0)
  4734.  
  4735.  bra.s .ddone
  4736.  
  4737. .setlight:
  4738.  move.w 2(a6,d1.w),6(a0)
  4739.  
  4740.  move.b VECOBJ,d1
  4741.  or.b d1,10(a0)
  4742.  
  4743. .ddone:
  4744.  
  4745. **********************************
  4746.  
  4747.  move.l PLR2_Obj,a0
  4748.  
  4749.  ifeq CHEESEY
  4750.  
  4751.  tst.w PLAYERTWOHEALTH
  4752.  bgt.s .notdead
  4753.  
  4754.  move.w #-1,12+64(a0)
  4755.  rts
  4756.  
  4757. .notdead: 
  4758.  move.l PLR2_Roompt,a1
  4759.  
  4760.  move.w Facing(a0),d0
  4761.  add.w #4096,d0
  4762.  and.w #8190,d0
  4763.  move.w d0,Facing+64(a0)
  4764.  
  4765.  move.w (a1),12+64(a0)
  4766.  move.w (a1),GraphicRoom+64(a0)
  4767.  
  4768.  moveq #0,d0
  4769.  move.b p2_gunselected,d0
  4770.  
  4771.  move.l LINKFILE,a1
  4772.  add.l #GunObjects,a1
  4773.  move.w (a1,d0.w*2),d0
  4774.  
  4775.  move.b d0,TypeOfThing+64(a0)
  4776.  move.b #1,64+16(a0)
  4777.  
  4778.  move.w (a0),d0
  4779.  move.w 64(a0),d1
  4780.  move.l ObjectPoints,a1
  4781.  move.l (a1,d0.w*8),(a1,d1.w*8) 
  4782.  move.l 4(a1,d0.w*8),4(a1,d1.w*8) 
  4783.  
  4784.  st WhichAnim+64(a0)
  4785.  
  4786.  move.l p2_yoff,d0
  4787.  move.l p2_height,d1
  4788.  asr.l #2,d1
  4789.  add.l #10*128,d1
  4790.  add.l d1,d0
  4791.  asr.l #7,d0
  4792.  move.w d0,4+64(a0)
  4793.  move.l PLR2_BOBBLEY,d1
  4794.  asr.l #8,d1
  4795.  move.l d1,d0
  4796.  asr.l #1,d0
  4797.  add.l d0,d1
  4798.  add.w d1,4+64(a0)
  4799.  
  4800.  move.b ObjInTop(a0),ObjInTop+64(a0)
  4801.  
  4802.  endc
  4803.  
  4804.  ifne CHEESEY
  4805.  
  4806.  move.w #-1,12+64(a0)
  4807.  endc
  4808.  
  4809.  rts
  4810.  
  4811.  
  4812.  
  4813. GunSelected: dc.b 0
  4814.  even
  4815.  
  4816.  
  4817. GunData: dc.l 0
  4818.  
  4819.  
  4820. protA: dc.w 0
  4821.  
  4822. Path:
  4823. ; incbin "testpath"
  4824. endpath:
  4825. pathpt: dc.l Path
  4826.  
  4827.  
  4828. PLR1KEYS: dc.b 0
  4829. PLR1PATH: dc.b 0
  4830. PLR1MOUSE: dc.b -1
  4831. PLR1JOY: dc.b 0
  4832. PLR2KEYS: dc.b 0
  4833. PLR2PATH: dc.b 0
  4834. PLR2MOUSE: dc.b -1
  4835. PLR2JOY: dc.b 0
  4836.  
  4837.  even
  4838.  
  4839. PLR1_bobble: dc.w 0
  4840. PLR2_bobble: dc.w 0
  4841. xwobble: dc.l 0
  4842. xwobxoff: dc.w 0
  4843.  
  4844. xwobzoff: dc.w 0
  4845.  
  4846. PLR1_Control:
  4847.  
  4848. ; Take a snapshot of everything.
  4849.  
  4850.  move.l PLR1_xoff,d2
  4851.  move.l d2,PLR1_oldxoff
  4852.  move.l d2,oldx
  4853.  move.l PLR1_zoff,d3
  4854.  move.l d3,PLR1_oldzoff
  4855.  move.l d3,oldz
  4856.  move.l p1_xoff,d0
  4857.  move.l d0,PLR1_xoff
  4858.  move.l d0,newx
  4859.  move.l p1_zoff,d1
  4860.  move.l d1,newz
  4861.  move.l d1,PLR1_zoff
  4862.  
  4863.  move.l p1_height,PLR1_height
  4864.  
  4865.  sub.l d2,d0
  4866.  sub.l d3,d1
  4867.  move.l d0,xdiff
  4868.  move.l d1,zdiff
  4869.  move.w p1_angpos,d0
  4870.  move.w d0,PLR1_angpos
  4871.  
  4872.  move.l #SineTable,a1
  4873.  move.w (a1,d0.w),PLR1_sinval
  4874.  add.w #2048,d0
  4875.  and.w #8190,d0
  4876.  move.w (a1,d0.w),PLR1_cosval
  4877.  
  4878.  move.l p1_yoff,d0
  4879.  move.w p1_bobble,d1
  4880.  move.w (a1,d1.w),d1
  4881.  move.w d1,d3
  4882.  ble.s .notnegative
  4883.  neg.w d1
  4884. .notnegative:
  4885.  add.w #16384,d1
  4886.  asr.w #4,d1
  4887.  
  4888.  tst.b PLR1_Ducked
  4889.  bne.s .notdouble
  4890.  tst.b PLR1_Squished
  4891.  bne.s .notdouble
  4892.  add.w d1,d1
  4893. .notdouble
  4894.  ext.l d1
  4895.  
  4896.  move.l d1,PLR1_BOBBLEY
  4897.  
  4898.  move.l PLR1_height,d4
  4899.  sub.l d1,d4
  4900.  add.l d1,d0
  4901.  
  4902.  cmp.b #'s',mors
  4903.  beq.s .otherwob
  4904.  asr.w #6,d3
  4905.  ext.l d3
  4906.  move.l d3,xwobble
  4907.  move.w PLR1_sinval,d1
  4908.  muls d3,d1
  4909.  move.w PLR1_cosval,d2
  4910.  muls d3,d2
  4911.  swap d1
  4912.  swap d2
  4913.  asr.w #7,d1
  4914.  move.w d1,xwobxoff
  4915.  asr.w #7,d2
  4916.  neg.w d2
  4917.  move.w d2,xwobzoff
  4918. .otherwob
  4919.  
  4920.  move.l d0,PLR1_yoff
  4921.  move.l d0,newy
  4922.  move.l d0,oldy
  4923.  
  4924.  move.l d4,thingheight
  4925.  move.l #40*256,StepUpVal
  4926.  tst.b PLR1_Squished
  4927.  beq.s .smallstep
  4928.  tst.b PLR1_Ducked
  4929.  beq.s .okbigstep
  4930. .smallstep
  4931.  move.l #10*256,StepUpVal
  4932. .okbigstep:
  4933.  
  4934.  move.l #$1000000,StepDownVal
  4935.  
  4936.  move.l PLR1_Roompt,a0
  4937.  move.w ToTelZone(a0),d0
  4938.  blt .noteleport
  4939.  
  4940.  move.w ToTelX(a0),newx
  4941.  move.w ToTelZ(a0),newz
  4942.  move.w #-1,CollId
  4943.  move.l #%111111111111111111,CollideFlags
  4944.  jsr Collision
  4945.  tst.b hitwall
  4946.  beq.s .teleport
  4947.  
  4948.  move.w PLR1_xoff,newx
  4949.  move.w PLR1_zoff,newz
  4950.  bra .noteleport
  4951.  
  4952. .teleport:
  4953.  
  4954.  st PLR1_TELEPORTED
  4955.  
  4956.  move.l PLR1_Roompt,a0
  4957.  move.w ToTelZone(a0),d0
  4958.  move.w ToTelX(a0),PLR1_xoff
  4959.  move.w ToTelZ(a0),PLR1_zoff
  4960.  move.l PLR1_yoff,d1
  4961.  sub.l ToZoneFloor(a0),d1
  4962.  move.l ZoneAdds,a0
  4963.  move.l (a0,d0.w*4),a0
  4964.  add.l LEVELDATA,a0
  4965.  move.l a0,PLR1_Roompt
  4966.  add.l ToZoneFloor(a0),d1
  4967.  move.l d1,PLR1s_yoff
  4968.  move.l d1,PLR1_yoff
  4969.  move.l d1,PLR1s_tyoff
  4970.  move.l PLR1_xoff,PLR1s_xoff
  4971.  move.l PLR1_zoff,PLR1s_zoff
  4972.  
  4973.  SAVEREGS
  4974.  move.w #0,Noisex
  4975.  move.w #0,Noisez
  4976.  move.w #26,Samplenum
  4977.  move.w #100,Noisevol
  4978.  move.w #$fff9,IDNUM
  4979.  jsr MakeSomeNoise
  4980.  GETREGS
  4981.  
  4982.  bra .cantmove
  4983.  
  4984. .noteleport:
  4985.  
  4986.  move.l PLR1_Roompt,objroom
  4987.  move.w #%100000000,wallflags
  4988.  move.b PLR1_StoodInTop,StoodInTop
  4989.  
  4990.  move.l #%1011111110111000011,CollideFlags
  4991.  move.w #-1,CollId
  4992.  
  4993.  jsr Collision
  4994.  tst.b hitwall
  4995.  beq.s .nothitanything
  4996.  move.w oldx,PLR1_xoff
  4997.  move.w oldz,PLR1_zoff
  4998.  move.l PLR1_xoff,PLR1s_xoff
  4999.  move.l PLR1_zoff,PLR1s_zoff
  5000.  bra .cantmove
  5001. .nothitanything:
  5002.  
  5003.  move.w #40,extlen
  5004.  move.b #0,awayfromwall
  5005.  
  5006.  clr.b exitfirst
  5007.  clr.b wallbounce
  5008.  bsr MoveObject
  5009.  move.b StoodInTop,PLR1_StoodInTop
  5010.  move.l objroom,PLR1_Roompt
  5011.  move.w newx,PLR1_xoff
  5012.  move.w newz,PLR1_zoff
  5013.  move.l PLR1_xoff,PLR1s_xoff
  5014.  move.l PLR1_zoff,PLR1s_zoff
  5015.  
  5016. .cantmove:
  5017.  
  5018.  move.l PLR1_Roompt,a0
  5019.  
  5020.  move.l ToZoneFloor(a0),d0
  5021.  tst.b PLR1_StoodInTop
  5022.  beq.s notintop
  5023.  move.l ToUpperFloor(a0),d0
  5024. notintop:
  5025.  
  5026.  adda.w #ToZonePts,a0
  5027.  sub.l PLR1_height,d0
  5028.  move.l d0,PLR1s_tyoff
  5029.  move.w p1_angpos,tmpangpos
  5030.  
  5031. ; move.l (a0),a0        ; jump to viewpoint list
  5032.  * A0 is pointing at a pointer to list of points to rotate
  5033.  move.w (a0)+,d1
  5034.  ext.l d1
  5035.  add.l PLR1_Roompt,d1
  5036.  move.l d1,PLR1_PointsToRotatePtr
  5037.  tst.b (a0)+
  5038.  sne.s DRAWNGRAPHTOP
  5039.  beq.s nobackgraphics
  5040.  cmp.b #'s',mors
  5041.  beq.s nobackgraphics
  5042.  move.l a0,-(a7)
  5043.  jsr putinbackdrop 
  5044.  move.l (a7)+,a0
  5045. nobackgraphics:
  5046.  
  5047.  move.b (a0)+,PLR1_Echo
  5048.  
  5049.  adda.w #10,a0
  5050.  move.l a0,PLR1_ListOfGraphRooms
  5051.  
  5052. *************************************************
  5053.  rts
  5054.  
  5055. DRAWNGRAPHTOP
  5056.  dc.w 0 
  5057. tstzone: dc.l 0
  5058. CollId: dc.w 0
  5059.  
  5060. PLR2_Control:
  5061.  
  5062. ; Take a snapshot of everything.
  5063.  
  5064.  move.l PLR2_xoff,d2
  5065.  move.l d2,PLR2_oldxoff
  5066.  move.l d2,oldx
  5067.  move.l PLR2_zoff,d3
  5068.  move.l d3,PLR2_oldzoff
  5069.  move.l d3,oldz
  5070.  move.l p2_xoff,d0
  5071.  move.l d0,PLR2_xoff
  5072.  move.l d0,newx
  5073.  move.l p2_zoff,d1
  5074.  move.l d1,newz
  5075.  move.l d1,PLR2_zoff
  5076.  
  5077.  move.l p2_height,PLR2_height
  5078.  
  5079.  sub.l d2,d0
  5080.  sub.l d3,d1
  5081.  move.l d0,xdiff
  5082.  move.l d1,zdiff
  5083.  move.w p2_angpos,d0
  5084.  move.w d0,PLR2_angpos
  5085.  
  5086.  move.l #SineTable,a1
  5087.  move.w (a1,d0.w),PLR2_sinval
  5088.  add.w #2048,d0
  5089.  and.w #8190,d0
  5090.  move.w (a1,d0.w),PLR2_cosval
  5091.  
  5092.  move.l p2_yoff,d0
  5093.  move.w p2_bobble,d1
  5094.  move.w (a1,d1.w),d1
  5095.  move.w d1,d3
  5096.  ble.s .notnegative
  5097.  neg.w d1
  5098. .notnegative:
  5099.  add.w #16384,d1
  5100.  asr.w #4,d1
  5101.  
  5102.  tst.b PLR2_Ducked
  5103.  bne.s .notdouble
  5104.  tst.b PLR2_Squished
  5105.  bne.s .notdouble
  5106.  add.w d1,d1
  5107. .notdouble
  5108.  ext.l d1
  5109.  
  5110.  move.l d1,PLR2_BOBBLEY
  5111.  
  5112.  move.l PLR2_height,d4
  5113.  sub.l d1,d4
  5114.  add.l d1,d0
  5115.  
  5116.  cmp.b #'s',mors
  5117.  bne.s .otherwob
  5118.  asr.w #6,d3
  5119.  ext.l d3
  5120.  move.l d3,xwobble
  5121.  move.w PLR2_sinval,d1
  5122.  muls d3,d1
  5123.  move.w PLR2_cosval,d2
  5124.  muls d3,d2
  5125.  swap d1
  5126.  swap d2
  5127.  asr.w #7,d1
  5128.  move.w d1,xwobxoff
  5129.  asr.w #7,d2
  5130.  neg.w d2
  5131.  move.w d2,xwobzoff
  5132. .otherwob
  5133.  
  5134.  move.l d0,PLR2_yoff
  5135.  move.l d0,newy
  5136.  move.l d0,oldy
  5137.  
  5138.  move.l d4,thingheight
  5139.  move.l #40*256,StepUpVal
  5140.  tst.b PLR2_Squished
  5141.  bne.s .smallstep
  5142.  tst.b PLR2_Ducked
  5143.  beq.s .okbigstep
  5144. .smallstep:
  5145.  move.l #10*256,StepUpVal
  5146. .okbigstep:
  5147.  
  5148.  move.l #$1000000,StepDownVal
  5149.  
  5150.  move.l PLR2_Roompt,a0
  5151.  move.w ToTelZone(a0),d0
  5152.  blt .noteleport
  5153.  
  5154.  move.w ToTelX(a0),newx
  5155.  move.w ToTelZ(a0),newz
  5156.  move.w #-1,CollId
  5157.  move.l #%111111111111111111,CollideFlags
  5158.  jsr Collision
  5159.  tst.b hitwall
  5160.  beq.s .teleport
  5161.  
  5162.  move.w PLR2_xoff,newx
  5163.  move.w PLR2_zoff,newz
  5164.  bra .noteleport
  5165.  
  5166. .teleport:
  5167.  
  5168.  st PLR2_TELEPORTED
  5169.  
  5170.  move.l PLR2_Roompt,a0
  5171.  move.w ToTelZone(a0),d0
  5172.  move.w ToTelX(a0),PLR2_xoff
  5173.  move.w ToTelZ(a0),PLR2_zoff
  5174.  move.l PLR2_yoff,d1
  5175.  sub.l ToZoneFloor(a0),d1
  5176.  move.l ZoneAdds,a0
  5177.  move.l (a0,d0.w*4),a0
  5178.  add.l LEVELDATA,a0
  5179.  move.l a0,PLR2_Roompt
  5180.  add.l ToZoneFloor(a0),d1
  5181.  move.l d1,PLR2s_yoff
  5182.  move.l d1,PLR2_yoff
  5183.  move.l d1,PLR2s_tyoff
  5184.  move.l PLR2_xoff,PLR2s_xoff
  5185.  move.l PLR2_zoff,PLR2s_zoff
  5186.  
  5187.  SAVEREGS
  5188.  move.w #0,Noisex
  5189.  move.w #0,Noisez
  5190.  move.w #26,Samplenum
  5191.  move.w #100,Noisevol
  5192.  move.w #$fff9,IDNUM
  5193.  jsr MakeSomeNoise
  5194.  GETREGS
  5195.  
  5196.  bra .cantmove
  5197.  
  5198. .noteleport:
  5199.  
  5200.  move.l PLR2_Roompt,objroom
  5201.  move.w #%100000000000,wallflags
  5202.  move.b PLR2_StoodInTop,StoodInTop
  5203.  
  5204.  move.l #%1011111010111100011,CollideFlags
  5205.  move.w #-1,CollId
  5206.  
  5207.  jsr Collision
  5208.  tst.b hitwall
  5209.  beq.s .nothitanything
  5210.  move.w oldx,PLR2_xoff
  5211.  move.w oldz,PLR2_zoff
  5212.  move.l PLR2_xoff,PLR2s_xoff
  5213.  move.l PLR2_zoff,PLR2s_zoff
  5214.  bra .cantmove
  5215. .nothitanything:
  5216.  
  5217.  move.w #40,extlen
  5218.  move.b #0,awayfromwall
  5219.  
  5220.  clr.b exitfirst
  5221.  clr.b wallbounce
  5222.  bsr MoveObject
  5223.  move.b StoodInTop,PLR2_StoodInTop
  5224.  move.l objroom,PLR2_Roompt
  5225.  move.w newx,PLR2_xoff
  5226.  move.w newz,PLR2_zoff
  5227.  move.l PLR2_xoff,PLR2s_xoff
  5228.  move.l PLR2_zoff,PLR2s_zoff
  5229.  
  5230. .cantmove
  5231.  
  5232.  move.l PLR2_Roompt,a0
  5233.  
  5234.  move.l ToZoneFloor(a0),d0
  5235.  tst.b PLR2_StoodInTop
  5236.  beq.s .notintop
  5237.  move.l ToUpperFloor(a0),d0
  5238. .notintop:
  5239.  
  5240.  adda.w #ToZonePts,a0
  5241.  sub.l PLR2_height,d0
  5242.  move.l d0,PLR2s_tyoff
  5243.  move.w p2_angpos,tmpangpos
  5244.  
  5245. ; move.l (a0),a0        ; jump to viewpoint list
  5246.  * A0 is pointing at a pointer to list of points to rotate
  5247.  move.w (a0)+,d1
  5248.  ext.l d1
  5249.  add.l PLR2_Roompt,d1
  5250.  move.l d1,PLR2_PointsToRotatePtr
  5251.  tst.b (a0)+
  5252.  sne.s DRAWNGRAPHTOP
  5253.  beq.s .nobackgraphics
  5254.  cmp.b #'s',mors
  5255.  bne.s .nobackgraphics
  5256.  move.l a0,-(a7)
  5257.  jsr putinbackdrop 
  5258.  move.l (a7)+,a0
  5259. .nobackgraphics:
  5260.  
  5261.  move.b (a0)+,PLR2_Echo
  5262.  
  5263.  adda.w #10,a0
  5264.  move.l a0,PLR2_ListOfGraphRooms
  5265.  
  5266. *****************************************************
  5267.  rts
  5268.  
  5269.  
  5270. KeyMap: ds.b 256
  5271.  
  5272. fillscrnwater:
  5273.  dc.w 0
  5274. DONTDOGUN:
  5275.  dc.w 0
  5276.  
  5277. ;temptemp: ds.l 200
  5278. ;temptempptr: dc.l 0
  5279.  
  5280. DrawDisplay:
  5281.  
  5282. ; move.l #temptemp,temptempptr
  5283.  
  5284.  clr.b fillscrnwater
  5285.  
  5286.  move.l #SineTable,a0
  5287.  move.w angpos,d0
  5288.  move.w (a0,d0.w),d6
  5289.  adda.w #2048,a0
  5290.  move.w (a0,d0.w),d7
  5291.  move.w d6,sinval
  5292.  move.w d7,cosval
  5293.  
  5294.  move.l yoff,d0
  5295.  asr.l #8,d0
  5296.  move.w d0,d1
  5297.  add.w #256-32,d1
  5298.  and.w #255,d1
  5299.  move.w d1,wallyoff
  5300.  move.l yoff,d0
  5301.  asr.l #6,d0
  5302.  move.w d0,flooryoff
  5303.  
  5304.  move.w xoff,d6
  5305.  move.w d6,d3
  5306.  asr.w #1,d3
  5307.  add.w d3,d6
  5308.  asr.w #1,d6
  5309.  move.w d6,xoff34
  5310.  
  5311.  move.w zoff,d6
  5312.  move.w d6,d3
  5313.  asr.w #1,d3
  5314.  add.w d3,d6
  5315.  asr.w #1,d6
  5316.  move.w d6,zoff34
  5317.  
  5318.  bsr RotateLevelPts
  5319.  bsr RotateObjectPts
  5320.  bsr CalcPLR1InLine
  5321.  
  5322.  cmp.b #'n',mors
  5323.  bne.s doplr2too
  5324.  move.l PLR2_Obj,a0
  5325.  move.w #-1,12(a0)
  5326.  move.w #-1,GraphicRoom(a0)
  5327.  bra noplr2either
  5328.  
  5329. doplr2too:
  5330.  bsr CalcPLR2InLine
  5331. noplr2either:
  5332.  
  5333.  move.l endoflist,a0
  5334. ; move.w #-1,(a0)
  5335.  
  5336. ; move.l #FinalOrder,a0
  5337.  
  5338.  
  5339. subroomloop:
  5340. ; move.w (a0)+,d7
  5341.  move.w -(a0),d7
  5342.  blt jumpoutofrooms
  5343.  
  5344. ; bsr setlrclip
  5345. ; move.w leftclip,d0
  5346. ; cmp.w rightclip,d0
  5347. ; bge subroomloop
  5348.  move.l a0,-(a7)
  5349.  
  5350.  move.l ZoneAdds,a0
  5351.  move.l (a0,d7.w*4),a0
  5352.  add.l LEVELDATA,a0
  5353.  move.l ToZoneRoof(a0),SplitHeight
  5354.  move.l a0,ROOMBACK
  5355.  
  5356.  move.l ZoneGraphAdds,a0
  5357.  move.l 4(a0,d7.w*8),a2
  5358.  move.l (a0,d7.w*8),a0
  5359.  
  5360.  add.l LEVELGRAPHICS,a0
  5361.  add.l LEVELGRAPHICS,a2
  5362.  move.l a2,ThisRoomToDraw+4
  5363.  move.l a0,ThisRoomToDraw
  5364.  
  5365.  move.l ListOfGraphRooms,a1
  5366.  
  5367.  
  5368.  
  5369. finditit:
  5370.  tst.w (a1)
  5371.  blt nomoretodoatall
  5372.  cmp.w (a1),d7
  5373.  beq outoffind
  5374.  adda.w #8,a1
  5375.  bra finditit
  5376.  
  5377. outoffind:
  5378.  
  5379.  move.l a1,-(a7)
  5380.  
  5381.  
  5382.  move.w #0,leftclip
  5383.  move.w RIGHTX,rightclip
  5384.  moveq #0,d7
  5385.  move.w 2(a1),d7
  5386.  blt.s outofrcliplop
  5387.  move.l LEVELCLIPS,a0
  5388.  lea (a0,d7.l*2),a0
  5389.  
  5390.  tst.w (a0)
  5391.  blt outoflcliplop
  5392.  
  5393.  bsr NEWsetlclip
  5394.  
  5395. intolcliplop:        ; clips
  5396.  tst.w (a0)
  5397.  blt outoflcliplop
  5398.  
  5399.  bsr NEWsetlclip 
  5400.  bra intolcliplop
  5401.  
  5402. outoflcliplop:
  5403.  
  5404.  addq #2,a0
  5405.  
  5406.  tst.w (a0)
  5407.  blt outofrcliplop
  5408.  
  5409.  bsr NEWsetrclip
  5410.  
  5411. intorcliplop:        ; clips
  5412.  tst.w (a0)
  5413.  blt outofrcliplop
  5414.  
  5415.  bsr NEWsetrclip 
  5416.  bra intorcliplop
  5417.  
  5418. outofrcliplop:
  5419.  
  5420.  
  5421.  move.w leftclip,d0
  5422.  ext.l d0
  5423.  move.l d0,leftclip-2
  5424.  
  5425.  cmp.w RIGHTX,d0
  5426.  bge dontbothercantseeit
  5427.  move.w rightclip,d1
  5428.  ext.l d1
  5429.  move.l d1,rightclip-2
  5430.  blt dontbothercantseeit
  5431.  cmp.w d1,d0
  5432.  bge dontbothercantseeit
  5433.  
  5434.  move.l yoff,d0
  5435.  cmp.l SplitHeight,d0
  5436.  blt botfirst
  5437.  
  5438.  move.l ThisRoomToDraw+4,a0
  5439.  cmp.l LEVELGRAPHICS,a0
  5440.  beq.s noupperroom
  5441.  st DOUPPER
  5442.  
  5443.  move.l ROOMBACK,a1
  5444.  move.l ToUpperRoof(a1),TOPOFROOM
  5445.  move.l ToUpperFloor(a1),BOTOFROOM
  5446.  
  5447.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5448.  bsr dothisroom
  5449. noupperroom:
  5450.  move.l ThisRoomToDraw,a0
  5451.  clr.b DOUPPER
  5452.  move.l #CurrentPointBrights,PointBrightsPtr
  5453.  
  5454.  move.l ROOMBACK,a1
  5455.  move.l ToZoneRoof(a1),d0
  5456.  move.l d0,TOPOFROOM
  5457.  move.l ToZoneFloor(a1),d1
  5458.  move.l d1,BOTOFROOM
  5459.  
  5460.  move.l ToZoneWater(a1),d2
  5461.  cmp.l yoff,d2
  5462.  blt.s .abovefirst
  5463.  move.l d2,BEFOREWATTOP
  5464.  move.l d1,BEFOREWATBOT
  5465.  move.l d2,AFTERWATBOT
  5466.  move.l d0,AFTERWATTOP
  5467.  bra.s .belowfirst
  5468. .abovefirst:
  5469.  move.l d0,BEFOREWATTOP
  5470.  move.l d2,BEFOREWATBOT
  5471.  move.l d1,AFTERWATBOT
  5472.  move.l d2,AFTERWATTOP
  5473. .belowfirst:
  5474.  
  5475.  bsr dothisroom
  5476.  
  5477.  bra dontbothercantseeit
  5478. botfirst:
  5479.  
  5480.  move.l ThisRoomToDraw,a0
  5481.  clr.b DOUPPER
  5482.  move.l #CurrentPointBrights,PointBrightsPtr
  5483.  
  5484.  move.l ROOMBACK,a1
  5485.  move.l ToZoneRoof(a1),d0
  5486.  move.l d0,TOPOFROOM
  5487.  move.l ToZoneFloor(a1),d1
  5488.  move.l d1,BOTOFROOM
  5489.  
  5490.  move.l ToZoneWater(a1),d2
  5491.  cmp.l yoff,d2
  5492.  blt.s .abovefirst
  5493.  move.l d2,BEFOREWATTOP
  5494.  move.l d1,BEFOREWATBOT
  5495.  move.l d2,AFTERWATBOT
  5496.  move.l d0,AFTERWATTOP
  5497.  bra.s .belowfirst
  5498. .abovefirst:
  5499.  move.l d0,BEFOREWATTOP
  5500.  move.l d2,BEFOREWATBOT
  5501.  move.l d1,AFTERWATBOT
  5502.  move.l d2,AFTERWATTOP
  5503. .belowfirst:
  5504.  
  5505.  
  5506.  bsr dothisroom
  5507.  move.l ThisRoomToDraw+4,a0
  5508.  cmp.l LEVELGRAPHICS,a0
  5509.  beq.s noupperroom2
  5510.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5511.  
  5512.  move.l ROOMBACK,a1
  5513.  move.l ToUpperRoof(a1),TOPOFROOM
  5514.  move.l ToUpperFloor(a1),BOTOFROOM
  5515.  
  5516.  st DOUPPER
  5517.  bsr dothisroom
  5518. noupperroom2:
  5519.  
  5520. dontbothercantseeit:
  5521. pastemp:
  5522.  
  5523.  move.l (a7)+,a1
  5524.  move.l ThisRoomToDraw,a0
  5525.  move.w (a0),d7
  5526.  
  5527.  adda.w #8,a1
  5528.  bra finditit
  5529.  
  5530. nomoretodoatall:
  5531.  
  5532.  move.l (a7)+,a0
  5533.  
  5534.  bra subroomloop
  5535.  
  5536. jumpoutofrooms:
  5537.  
  5538.  
  5539.  tst.b DONTDOGUN
  5540.  bne NOGUNLOOK
  5541.  
  5542.  cmp.b #'s',mors
  5543.  beq.s drawslavegun
  5544.  
  5545.  moveq #0,d0
  5546.  move.b PLR1_GunSelected,d0
  5547.  moveq #0,d1
  5548.  move.b PLR1_GunFrame,d1
  5549. ; bsr DRAWINGUN
  5550.  bra drawngun
  5551.  
  5552. drawslavegun
  5553.  moveq #0,d0
  5554.  move.b PLR2_GunSelected,d0
  5555.  moveq #0,d1
  5556.  move.b PLR2_GunFrame,d1
  5557. ; bsr DRAWINGUN
  5558.  
  5559. drawngun:
  5560.  
  5561. NOGUNLOOK:
  5562.  
  5563.  moveq #0,d1
  5564.  move.b PLR1_GunFrame,d1
  5565.  sub.w TempFrames,d1
  5566.  bgt.s .nn
  5567.  moveq #0,d1
  5568. .nn
  5569.  move.b d1,PLR1_GunFrame
  5570.  
  5571.  ble.s .donefire
  5572.  sub.b #1,PLR1_GunFrame
  5573. .donefire:
  5574.  
  5575.  moveq #0,d1
  5576.  move.b PLR2_GunFrame,d1
  5577.  sub.w TempFrames,d1
  5578.  bgt.s .nn2
  5579.  moveq #0,d1
  5580. .nn2
  5581.  move.b d2,PLR2_GunFrame
  5582.  
  5583.  ble.s .donefire2
  5584.  sub.b #1,PLR2_GunFrame
  5585. .donefire2:
  5586.  
  5587.  tst.b DOANYWATER
  5588.  beq.s nowaterfull
  5589.  
  5590.  move.w #231,d0
  5591.  move.l FASTBUFFER,a0
  5592.  tst.b fillscrnwater
  5593.  beq nowaterfull
  5594.  bgt oknothalf
  5595.  moveq #119,d0
  5596.  add.l #320*120*2,a0
  5597. oknothalf:
  5598.  
  5599.  bclr.b #1,$bfe001
  5600.  
  5601.  move.l TexturePal,a2
  5602.  add.l #256*40,a2
  5603.  moveq #0,d2
  5604.  
  5605.  tst.b FULLSCR
  5606.  bne.s DOALLSCREEN
  5607.  
  5608. DOSOMESCREEN:
  5609.  
  5610.  move.w #159,d0
  5611. .fw:
  5612.  move.w #191,d1
  5613. .fwa:
  5614.  move.b (a0),d2
  5615.  move.b (a2,d2.w),(a0)+
  5616.  dbra d1,.fwa
  5617.  add.w #(320-192),a0
  5618.  dbra d0,.fw
  5619.  rts
  5620.  
  5621. DOALLSCREEN:
  5622.  
  5623. fw:
  5624.  move.w #287,d1
  5625. fwa:
  5626.  move.b (a0),d2
  5627.  move.b (a2,d2.w),(a0)+
  5628.  dbra d1,fwa
  5629.  add.w #32,a0
  5630.  dbra d0,fw
  5631.  
  5632. ; move.l frompt,a0
  5633. ; add.l #104*4*60,a0
  5634. ; move.w #31,d0
  5635. ;fw:
  5636. ; move.w d5,d1
  5637. ; move.l a0,a1
  5638. ;fwd:
  5639. ;val SET 104*4*19
  5640. ; REPT 20
  5641. ; and.w #$ff,val(a1)
  5642. ;val SET val-104*4
  5643. ; ENDR
  5644. ; sub.l #104*4*20,a1
  5645. ; dbra d1,fwd
  5646. ; addq #4,a0
  5647. ; dbra d0,fw
  5648. ;
  5649. ; addq #4,a0
  5650. ;
  5651. ; move.w #31,d0
  5652. ;sw:
  5653. ; move.w d5,d1
  5654. ; move.l a0,a1
  5655. ;swd:
  5656. ;val SET 104*4*19
  5657. ; REPT 20
  5658. ; and.w #$ff,val(a1)
  5659. ;val SET val-104*4
  5660. ; ENDR
  5661. ; sub.l #104*4*20,a1
  5662. ; dbra d1,swd
  5663. ; addq #4,a0
  5664. ; dbra d0,sw
  5665. ;
  5666. ; addq #4,a0
  5667. ;
  5668. ; move.w #31,d0
  5669. ;tw:
  5670. ; move.w d5,d1
  5671. ; move.l a0,a1
  5672. ;twd:
  5673. ;val SET 104*4*19
  5674. ; REPT 20
  5675. ; and.w #$ff,val(a1)
  5676. ;val SET val-104*4
  5677. ; ENDR
  5678. ; sub.l #104*4*20,a1
  5679. ; dbra d1,twd
  5680. ; addq #4,a0
  5681. ; dbra d0,tw
  5682. ;
  5683.  rts
  5684.  
  5685. nowaterfull:
  5686.  bset.b #1,$bfe001
  5687.  rts
  5688.  
  5689. prot9: dc.w 0
  5690.  
  5691. ;TempBuffer: ds.l 100 
  5692.  
  5693. prot8: dc.w 0
  5694.  
  5695. ClipTable: ds.l 30
  5696. EndOfClipPt: dc.l 0
  5697. DOUPPER: dc.w 0
  5698.  
  5699. RealTable:
  5700.  dc.l prot1-78935450
  5701.  dc.l prot2-78935450
  5702.  dc.l prot3-78935450
  5703.  dc.l prot4-78935450
  5704.  dc.l prot5-78935450
  5705.  dc.l prot6-78935450
  5706.  dc.l prot7-78935450
  5707.  dc.l prot8-78935450
  5708.  dc.l prot9-78935450
  5709.  dc.l protA-78935450
  5710.  
  5711. dothisroom
  5712.  
  5713.  move.w (a0)+,d0
  5714.  move.w d0,currzone
  5715.  move.w d0,d1
  5716.  muls #40,d1
  5717.  add.l #BIGMAP,d1
  5718.  move.l d1,BIGPTR
  5719.  move.w d0,d1
  5720.  ext.l d1
  5721.  asl.w #2,d1
  5722.  add.l #COMPACTMAP,d1
  5723.  move.l d1,COMPACTPTR
  5724.  add.l #4,d1
  5725.  cmp.l LASTZONE,d1
  5726.  ble.s .nochange
  5727.  move.l d1,LASTZONE
  5728. .nochange:
  5729.  
  5730.  move.l #ZoneBrightTable,a1
  5731.  move.l (a1,d0.w*4),d1
  5732.  tst.b DOUPPER
  5733.  bne.s .okbot
  5734.  swap d1
  5735. .okbot:
  5736.  move.w d1,ZoneBright
  5737.  
  5738. polyloop:
  5739.  move.w (a0)+,d0
  5740.  move.w d0,WALLIDENT
  5741.  and.w #$ff,d0
  5742.  tst.b d0
  5743.  blt jumpoutofloop
  5744.  beq itsawall
  5745.  cmp.w #3,d0
  5746.  beq itsasetclip
  5747.  blt itsafloor
  5748.  cmp.w #4,d0
  5749.  beq itsanobject
  5750.  cmp.w #5,d0
  5751.  beq itsanarc
  5752.  cmp.w #6,d0
  5753.  beq itsalightbeam
  5754.  cmp.w #7,d0
  5755.  beq.s itswater
  5756.  cmp.w #9,d0
  5757.  ble itsachunkyfloor
  5758.  cmp.w #11,d0
  5759.  ble itsabumpyfloor
  5760.  cmp.w #12,d0
  5761.  beq.s itsbackdrop
  5762.  cmp.w #13,d0
  5763.  beq.s itsaseewall
  5764.  
  5765.  bra polyloop
  5766.  
  5767. itsaseewall:
  5768.  st seethru
  5769.  jsr itsawalldraw
  5770.  bra polyloop
  5771.  
  5772. itsbackdrop:
  5773.  jsr putinbackdrop
  5774.  bra polyloop
  5775.  
  5776. itswater:
  5777.  PROTHCHECK
  5778.  move.w #2,SMALLIT
  5779.  move.w #3,d0
  5780.  clr.b gourfloor
  5781.  move.l #FloorLine,LineToUse
  5782.  st usewater
  5783.  clr.b usebumps
  5784.  jsr itsafloordraw
  5785.  bra polyloop
  5786.  
  5787. itsanarc:
  5788.  jsr CurveDraw
  5789.  bra polyloop
  5790.  
  5791. itsanobject:
  5792.  jsr ObjDraw
  5793.  bra polyloop
  5794.  
  5795. itsalightbeam:
  5796.  jsr LightDraw
  5797.  bra polyloop
  5798.  
  5799. itsabumpyfloor:
  5800.  move.w #1,SMALLIT
  5801.  sub.w #9,d0
  5802.  st usebumps
  5803.  st smoothbumps
  5804.  clr.b usewater
  5805.  move.l #BumpLine,LineToUse
  5806.  jsr itsafloordraw
  5807.  bra polyloop
  5808.  
  5809. itsachunkyfloor:
  5810.  move.w #1,SMALLIT
  5811.  subq.w #7,d0
  5812.  st usebumps
  5813.  sub.w #12,topclip
  5814. ; add.w #10,botclip
  5815.  clr.b smoothbumps
  5816.  clr.b usewater
  5817.  move.l #BumpLine,LineToUse
  5818.  jsr itsafloordraw
  5819.  add.w #12,topclip
  5820. ; sub.w #10,botclip
  5821.  bra polyloop 
  5822.  
  5823. itsafloor:
  5824.  
  5825.  move.l PointBrightsPtr,FloorPtBrights
  5826.  
  5827.  move.w currzone,d1
  5828.  muls #80,d1
  5829.  
  5830.  cmp.w #2,d0
  5831.  bne.s .nfl
  5832.  add.l #2,d1
  5833. .nfl
  5834.  add.l d1,FloorPtBrights
  5835.  
  5836.  move.w #1,SMALLIT
  5837.  
  5838.  movem.l a0/d0,-(a7)
  5839.  move.l $4.w,a6
  5840.  jsr _LVOSuperState(a6)
  5841.  move.l d0,SSTACK
  5842.  movem.l (a7)+,a0/d0
  5843.  
  5844.  move.l #FloorLine,LineToUse
  5845. * 1,2 = floor/roof
  5846.  clr.b usewater
  5847.  clr.b usebumps
  5848.  move.b GOURSEL,gourfloor    
  5849.  jsr itsafloordraw
  5850.  move.l a0,-(a7)
  5851.  move.l $4.w,a6
  5852.  move.l SSTACK,d0
  5853.  jsr _LVOUserState(a6)
  5854.  move.l (a7)+,a0
  5855.  bra polyloop
  5856. itsasetclip:
  5857.  bra polyloop
  5858. itsawall:
  5859.  clr.b seethru
  5860. ; move.l #stripbuffer,a1
  5861.  jsr itsawalldraw
  5862.  bra polyloop
  5863.  
  5864. jumpoutofloop:
  5865.  rts
  5866.  
  5867. LASTZONE: dc.l 0
  5868. COMPACTPTR: dc.l 0
  5869. BIGPTR: dc.l 0
  5870. WALLIDENT: dc.w 0
  5871. SMALLIT: dc.w 0
  5872. GOURSEL: dc.w 0
  5873. ThisRoomToDraw: dc.l 0,0
  5874. SplitHeight: dc.l 0
  5875.  
  5876.  include "ab3:source_4000/OrderZones"
  5877.  
  5878. ReadMouse:
  5879.  move.l #$dff000,a6
  5880.  clr.l d0
  5881.  clr.l d1
  5882.  move.w $a(a6),d0
  5883.  lsr.w #8,d0
  5884.  ext.l d0
  5885.  move.w d0,d3
  5886.  move.w oldmy,d2
  5887.  sub.w d2,d0
  5888.  
  5889.  cmp.w #127,d0
  5890.  blt nonegy
  5891.  move.w #255,d1
  5892.  sub.w d0,d1
  5893.  move.w d1,d0
  5894.  neg.w d0
  5895. nonegy:
  5896.  
  5897.  cmp.w #-127,d0
  5898.  bge nonegy2
  5899.  move.w #255,d1
  5900.  add.w d0,d1
  5901.  move.w d1,d0
  5902. nonegy2:
  5903.  
  5904.  add.b d0,d2
  5905.  add.w d0,oldy2
  5906.  move.w d2,oldmy
  5907.  move.w d2,d0
  5908.  
  5909.  move.w oldy2,d0
  5910.  move.w d0,ymouse
  5911.  
  5912.  clr.l d0
  5913.  clr.l d1
  5914.  move.w $a(a6),d0
  5915.  ext.w d0
  5916.  ext.l d0
  5917.  move.w d0,d3
  5918.  move.w oldmx,d2
  5919.  sub.w d2,d0
  5920.  
  5921.  cmp.w #127,d0
  5922.  blt nonegx
  5923.  move.w #255,d1
  5924.  sub.w d0,d1
  5925.  move.w d1,d0
  5926.  neg.w d0
  5927. nonegx:
  5928.  
  5929.  cmp.w #-127,d0
  5930.  bge nonegx2
  5931.  move.w #255,d1
  5932.  add.w d0,d1
  5933.  move.w d1,d0
  5934. nonegx2:
  5935.  
  5936.  add.b d0,d2
  5937.  move.w d0,d1
  5938.  move.w d2,oldmx
  5939.  
  5940.  move.w #$0,$dff034
  5941.  
  5942.  add.w d0,oldx2
  5943.  move.w oldx2,d0
  5944.  and.w #2047,d0
  5945.  move.w d0,oldx2
  5946.  
  5947.  asl.w #2,d0
  5948.  sub.w prevx,d0
  5949.  add.w d0,prevx
  5950.  add.w d0,angpos
  5951.  move.w #0,lrs
  5952.  rts
  5953.  
  5954. noturn:
  5955.  
  5956. ; got to move lr instead. 
  5957.  
  5958. ; d1 = speed moved l/r
  5959.  
  5960.  move.w d1,lrs
  5961.  
  5962.  rts
  5963.  
  5964. lrs: dc.w 0
  5965. prevx: dc.w 0
  5966.  
  5967. angpos: dc.w 0
  5968. mang: dc.w 0
  5969. oldymouse: dc.w 0
  5970. xmouse: dc.w 0
  5971. ymouse: dc.w 0
  5972. oldx2: dc.w 0
  5973. oldmx: dc.w 0
  5974. oldmy: dc.w 0
  5975. oldy2: dc.w 0
  5976.  
  5977. MAPON: dc.w $0
  5978. REALMAPON: dc.w 0
  5979.  
  5980. RotateLevelPts:
  5981.  
  5982.  tst.b REALMAPON
  5983.  beq ONLYTHELONELY
  5984.  
  5985.  move.w sinval,d6
  5986.  swap d6
  5987.  move.w cosval,d6
  5988.  move.l Points,a3
  5989.  move.l #Rotated,a1
  5990.  move.l #OnScreen,a2
  5991.  move.w xoff,d4
  5992.  asr.w #1,d4
  5993.  move.w zoff,d5
  5994.  asr.w #1,d5
  5995. ; move.w #$c40,$dff106
  5996. ; move.w #$f00,$dff180
  5997.  
  5998.  move.w NumLevPts,d7
  5999.  
  6000.  tst.b FULLSCR
  6001.  bne BIGALL
  6002.  
  6003. pointrotlop2:
  6004.  move.w (a3)+,d0
  6005.  asr.w #1,d0
  6006.  sub.w d4,d0
  6007.  move.w d0,d2
  6008.  move.w (a3)+,d1
  6009.  asr.w #1,d1
  6010.  sub.w d5,d1
  6011.  muls d6,d2
  6012.  swap d6
  6013.  move.w d1,d3
  6014.  muls d6,d3
  6015.  sub.l d3,d2
  6016. ; add.l d2,d2
  6017. ; swap d2
  6018. ; ext.l d2
  6019. ; asl.l #7,d2
  6020.  
  6021.  asr.l #7,d2
  6022.  
  6023.  add.l xwobble,d2
  6024.  move.l d2,(a1)+
  6025.  
  6026.  muls d6,d0
  6027.  swap d6
  6028.  muls d6,d1
  6029.  add.l d0,d1
  6030. ; asl.l #2,d1
  6031. ; swap d1
  6032.  
  6033.  asr.l #8,d1
  6034.  asr.l #6,d1
  6035.  
  6036.  move.l d1,(a1)+
  6037.  
  6038.  tst.l d1
  6039.  bgt.s ptnotbehind
  6040.  tst.w d2
  6041.  bgt.s onrightsomewhere
  6042.  move.w #0,d2
  6043.  bra putin
  6044. onrightsomewhere:
  6045.  move.w RIGHTX,d2
  6046.  bra putin
  6047. ptnotbehind:
  6048.  
  6049.  divs.l d1,d2
  6050.  add.w MIDDLEX,d2
  6051. putin:
  6052.  move.w d2,(a2)+
  6053.  
  6054.  dbra d7,pointrotlop2
  6055. outofpointrot:
  6056.   rts
  6057.  
  6058.  
  6059. BIGALL:
  6060.  
  6061. pointrotlop2B:
  6062.  move.w (a3)+,d0
  6063.  asr.w #1,d0
  6064.  sub.w d4,d0
  6065.  move.w d0,d2
  6066.  move.w (a3)+,d1
  6067.  asr.w #1,d1
  6068.  sub.w d5,d1
  6069.  muls d6,d2
  6070.  swap d6
  6071.  move.w d1,d3
  6072.  muls d6,d3
  6073.  sub.l d3,d2
  6074. ; add.l d2,d2
  6075. ; swap d2
  6076. ; ext.l d2
  6077. ; asl.l #7,d2
  6078.  asr.l #7,d2
  6079.  add.l xwobble,d2
  6080.  move.l d2,(a1)+
  6081.  
  6082.  muls d6,d0
  6083.  swap d6
  6084.  muls d6,d1
  6085.  add.l d0,d1
  6086.  
  6087.  divs.l #3,d1
  6088.  asr.l #8,d1
  6089.  asr.l #5,d1
  6090.  
  6091. ; asl.l #3,d1
  6092. ; swap d1
  6093. ; ext.l d1
  6094. ; divs #3,d1
  6095.  move.l d1,(a1)+
  6096.  
  6097.  tst.l d1
  6098.  bgt.s ptnotbehindB
  6099.  tst.w d2
  6100.  bgt.s onrightsomewhereB
  6101.  move.w #0,d2
  6102.  bra putinB
  6103. onrightsomewhereB:
  6104.  move.w RIGHTX,d2
  6105.  bra putinB
  6106. ptnotbehindB:
  6107.  
  6108.  divs.l d1,d2
  6109.  add.w MIDDLEX,d2
  6110. putinB:
  6111.  move.w d2,(a2)+
  6112.  
  6113.  dbra d7,pointrotlop2B
  6114.   rts
  6115.  
  6116.  
  6117. ONLYTHELONELY:
  6118.  
  6119.  move.w sinval,d6
  6120.  swap d6
  6121.  move.w cosval,d6
  6122.  
  6123.  move.l PointsToRotatePtr,a0
  6124.  move.l Points,a3
  6125.  move.l #Rotated,a1
  6126.  move.l #OnScreen,a2
  6127.  move.w xoff,d4
  6128.  move.w zoff,d5
  6129.  
  6130. ; move.w #$c40,$dff106
  6131. ; move.w #$f00,$dff180
  6132.  
  6133.  tst.b FULLSCR
  6134.  bne BIGLONELY
  6135.  
  6136. pointrotlop:
  6137.  move.w (a0)+,d7
  6138.  blt outofpointrot
  6139.  
  6140.  move.w (a3,d7*4),d0
  6141.  sub.w d4,d0
  6142.  move.w d0,d2
  6143.  move.w 2(a3,d7*4),d1
  6144.  sub.w d5,d1
  6145.  muls d6,d2
  6146.  swap d6
  6147.  move.w d1,d3
  6148.  muls d6,d3
  6149.  sub.l d3,d2
  6150.  add.l d2,d2
  6151.  swap d2
  6152.  ext.l d2
  6153.  asl.l #7,d2
  6154.  add.l xwobble,d2
  6155.  move.l d2,(a1,d7*8)
  6156.  
  6157.  muls d6,d0
  6158.  swap d6
  6159.  muls d6,d1
  6160.  add.l d0,d1
  6161.  asl.l #1,d1
  6162.  swap d1
  6163. ; ext.l d1
  6164. ; divs #3,d1
  6165.  move.l d1,4(a1,d7*8)
  6166.  
  6167.  tst.w d1
  6168.  bgt.s .ptnotbehind
  6169.  tst.w d2
  6170.  bgt.s .onrightsomewhere
  6171.  move.w #0,d2
  6172.  bra .putin
  6173. .onrightsomewhere:
  6174.  move.w RIGHTX,d2
  6175.  bra .putin
  6176. .ptnotbehind:
  6177.  
  6178.  divs d1,d2
  6179.  add.w MIDDLEX,d2
  6180. .putin:
  6181.  move.w d2,(a2,d7*2)
  6182.  
  6183.  bra pointrotlop
  6184.  
  6185. ; move.w #$c40,$dff106
  6186. ; move.w #$ff0,$dff180
  6187.  
  6188.  rts
  6189.  
  6190. BIGLONELY:
  6191.  
  6192. .pointrotlop:
  6193.  move.w (a0)+,d7
  6194.  blt.s .outofpointrot
  6195.  
  6196.  move.w (a3,d7*4),d0
  6197.  sub.w d4,d0
  6198.  move.w d0,d2
  6199.  move.w 2(a3,d7*4),d1
  6200.  sub.w d5,d1
  6201.  muls d6,d2
  6202.  swap d6
  6203.  move.w d1,d3
  6204.  muls d6,d3
  6205.  sub.l d3,d2
  6206.  add.l d2,d2
  6207.  swap d2
  6208.  ext.l d2
  6209.  asl.l #7,d2
  6210.  add.l xwobble,d2
  6211.  move.l d2,(a1,d7*8)
  6212.  
  6213.  muls d6,d0
  6214.  swap d6
  6215.  muls d6,d1
  6216.  add.l d0,d1
  6217.  asl.l #2,d1
  6218.  swap d1
  6219.  ext.l d1
  6220.  divs #3,d1
  6221.  move.l d1,4(a1,d7*8)
  6222.  
  6223.  tst.w d1
  6224.  bgt.s .ptnotbehind
  6225.  tst.w d2
  6226.  bgt.s .onrightsomewhere
  6227.  move.w #0,d2
  6228.  bra .putin
  6229. .onrightsomewhere:
  6230.  move.w RIGHTX,d2
  6231.  bra .putin
  6232. .ptnotbehind:
  6233.  
  6234.  divs d1,d2
  6235.  add.w MIDDLEX,d2
  6236. .putin:
  6237.  move.w d2,(a2,d7*2)
  6238.  
  6239.  bra .pointrotlop
  6240.  
  6241. .outofpointrot:
  6242. ; move.w #$c40,$dff106
  6243. ; move.w #$ff0,$dff180
  6244.  
  6245.  rts
  6246.  
  6247.  
  6248. PLR1_ObjDists
  6249.  ds.w 250
  6250. PLR2_ObjDists
  6251.  ds.w 250
  6252.  
  6253. CalcPLR1InLine:
  6254.  
  6255.  move.w PLR1_sinval,d5
  6256.  move.w PLR1_cosval,d6
  6257.  move.l ObjectData,a4
  6258.  move.l ObjectPoints,a0
  6259.  move.w NumObjectPoints,d7
  6260.  move.l #PLR1_ObsInLine,a2
  6261.  move.l #PLR1_ObjDists,a3
  6262.  
  6263. .objpointrotlop:
  6264.  
  6265.  cmp.b #3,16(a4)
  6266.  beq.s .itaux
  6267.  
  6268.  move.w (a0),d0
  6269.  sub.w PLR1_xoff,d0
  6270.  move.w 4(a0),d1
  6271.  addq #8,a0
  6272.  
  6273.  tst.w 12(a4)
  6274.  blt .noworkout
  6275.  
  6276.  moveq #0,d2
  6277.  move.b 16(a4),d2
  6278.  ;move.l #ColBoxTable,a6
  6279.  ;lea (a6,d2.w*8),a6
  6280.  
  6281.  sub.w PLR1_zoff,d1
  6282.  move.w d0,d2
  6283.  muls d6,d2
  6284.  move.w d1,d3
  6285.  muls d5,d3
  6286.  sub.l d3,d2
  6287.  add.l d2,d2
  6288.  
  6289.  bgt.s .okh
  6290.  neg.l d2
  6291. .okh:
  6292.  swap d2
  6293.  
  6294.  muls d5,d0
  6295.  muls d6,d1
  6296.  add.l d0,d1
  6297.  asl.l #2,d1
  6298.  swap d1
  6299.  moveq #0,d3
  6300.  
  6301.  tst.w d1
  6302.  ble.s .notinline
  6303.  asr.w #1,d2
  6304.  cmp.w #80,d2
  6305.  bgt.s .notinline
  6306.  
  6307.  st d3
  6308. .notinline
  6309.  move.b d3,(a2)+
  6310.  
  6311.  move.w d1,(a3)+
  6312.  
  6313.  add.w #64,a4
  6314.  dbra d7,.objpointrotlop
  6315.  
  6316.  rts
  6317.  
  6318. .itaux:
  6319.  add.w #64,a4
  6320.  bra .objpointrotlop
  6321.  
  6322. .noworkout:
  6323.  move.b #0,(a2)+
  6324.  move.w #0,(a3)+
  6325.  add.w #64,a4
  6326.  dbra d7,.objpointrotlop
  6327.  rts
  6328.  
  6329.  
  6330. CalcPLR2InLine:
  6331.  
  6332.  move.w PLR2_sinval,d5
  6333.  move.w PLR2_cosval,d6
  6334.  move.l ObjectData,a4
  6335.  move.l ObjectPoints,a0
  6336.  move.w NumObjectPoints,d7
  6337.  move.l #PLR2_ObsInLine,a2
  6338.  move.l #PLR2_ObjDists,a3
  6339.  
  6340. .objpointrotlop:
  6341.  
  6342.  cmp.b #3,16(a4)
  6343.  beq.s .itaux
  6344.  
  6345.  move.w (a0),d0
  6346.  sub.w PLR2_xoff,d0
  6347.  move.w 4(a0),d1
  6348.  addq #8,a0
  6349.  
  6350.  tst.w 12(a4)
  6351.  blt .noworkout
  6352.  
  6353.  moveq #0,d2
  6354.  move.b 16(a4),d2
  6355. ; move.l #ColBoxTable,a6
  6356. ; lea (a6,d2.w*8),a6
  6357.  
  6358.  sub.w PLR2_zoff,d1
  6359.  move.w d0,d2
  6360.  muls d6,d2
  6361.  move.w d1,d3
  6362.  muls d5,d3
  6363.  sub.l d3,d2
  6364.  add.l d2,d2
  6365.  
  6366.  bgt.s .okh
  6367.  neg.l d2
  6368. .okh:
  6369.  swap d2
  6370.  
  6371.  muls d5,d0
  6372.  muls d6,d1
  6373.  add.l d0,d1
  6374.  asl.l #2,d1
  6375.  swap d1
  6376.  moveq #0,d3
  6377.  
  6378.  tst.w d1
  6379.  ble.s .notinline
  6380.  asr.w #1,d2
  6381.  cmp.w (a6),d2
  6382.  bgt.s .notinline
  6383.  
  6384.  st d3
  6385. .notinline
  6386.  move.b d3,(a2)+
  6387.  
  6388.  move.w d1,(a3)+
  6389.  
  6390.  add.w #64,a4
  6391.  dbra d7,.objpointrotlop
  6392.  
  6393.  rts
  6394.  
  6395. .itaux:
  6396.  add.w #64,a4
  6397.  bra .objpointrotlop
  6398.  
  6399. .noworkout:
  6400.  move.w #0,(a3)+
  6401.  move.b #0,(a2)+
  6402.  add.w #64,a4
  6403.  dbra d7,.objpointrotlop
  6404.  rts
  6405.  
  6406.  
  6407. RotateObjectPts:
  6408.  
  6409.  move.w sinval,d5
  6410.  move.w cosval,d6
  6411.  
  6412.  move.l ObjectData,a4
  6413.  move.l ObjectPoints,a0
  6414.  move.w NumObjectPoints,d7
  6415.  move.l #ObjRotated,a1
  6416.  
  6417.  tst.b FULLSCR
  6418.  bne BIGOBJPTS
  6419.  
  6420.  
  6421. .objpointrotlop:
  6422.  
  6423.  cmp.b #3,16(a4)
  6424.  beq.s .itaux
  6425.  
  6426.  move.w (a0),d0
  6427.  sub.w xoff,d0
  6428.  move.w 4(a0),d1
  6429.  addq #8,a0
  6430.  
  6431.  tst.w 12(a4)
  6432.  blt .noworkout
  6433.  
  6434.  sub.w zoff,d1
  6435.  
  6436.  move.w d0,d2
  6437.  muls d6,d2
  6438.  move.w d1,d3
  6439.  muls d5,d3
  6440.  sub.l d3,d2
  6441.  
  6442.  
  6443.  add.l d2,d2
  6444.  swap d2
  6445.  move.w d2,(a1)+
  6446.  
  6447.  muls d5,d0
  6448.  muls d6,d1
  6449.  add.l d0,d1
  6450.  asl.l #1,d1
  6451.  swap d1
  6452. ; ext.l d1
  6453. ; divs #3,d1
  6454.  moveq #0,d3
  6455.  
  6456.  move.w d1,(a1)+
  6457.  ext.l d2
  6458.  asl.l #7,d2
  6459.  add.l xwobble,d2
  6460.  move.l d2,(a1)+
  6461.  
  6462.  dbra d7,.objpointrotlop
  6463.  
  6464.  rts
  6465.  
  6466. .itaux:
  6467.  add.w #64,a4
  6468.  bra .objpointrotlop
  6469.  
  6470. .noworkout:
  6471.   move.l #0,(a1)+
  6472.   move.l #0,(a1)+
  6473.   add.w #64,a4
  6474.   dbra d7,.objpointrotlop
  6475.   rts
  6476.   
  6477. BIGOBJPTS:
  6478.  
  6479. .objpointrotlop:
  6480.  
  6481.  cmp.b #3,16(a4)
  6482.  beq.s .itaux
  6483.  
  6484.  move.w (a0),d0
  6485.  sub.w xoff,d0
  6486.  move.w 4(a0),d1
  6487.  addq #8,a0
  6488.  
  6489.  tst.w 12(a4)
  6490.  blt .noworkout
  6491.  
  6492.  sub.w zoff,d1
  6493.  move.w d0,d2
  6494.  muls d6,d2
  6495.  move.w d1,d3
  6496.  muls d5,d3
  6497.  sub.l d3,d2
  6498.  
  6499.  
  6500.  add.l d2,d2
  6501.  swap d2
  6502.  move.w d2,(a1)+
  6503.  
  6504.  muls d5,d0
  6505.  muls d6,d1
  6506.  add.l d0,d1
  6507.  asl.l #2,d1
  6508.  swap d1
  6509.  ext.l d1
  6510.  divs #3,d1
  6511.  moveq #0,d3
  6512.  
  6513.  move.w d1,(a1)+
  6514.  ext.l d2
  6515.  asl.l #7,d2
  6516.  add.l xwobble,d2
  6517.  move.l d2,(a1)+
  6518.  sub.l xwobble,d2
  6519.  
  6520.  add.w #64,a4
  6521.  dbra d7,.objpointrotlop
  6522.  
  6523.  rts
  6524.  
  6525. .itaux:
  6526.  add.w #64,a4
  6527.  bra .objpointrotlop
  6528.  
  6529. .noworkout:
  6530.   move.l #0,(a1)+
  6531.   move.l #0,(a1)+
  6532.   add.w #64,a4
  6533.   dbra d7,.objpointrotlop
  6534.   rts
  6535.  
  6536. LightDraw:
  6537.  
  6538.  move.w (a0)+,d0
  6539.  move.w (a0)+,d1
  6540.  move.l #Rotated,a1
  6541.  move.w 6(a1,d0.w*8),d2
  6542.  ble.s oneendbehind
  6543.  move.w 6(a1,d1.w*8),d3
  6544.  bgt.s bothendsinfront
  6545.  
  6546. oneendbehind:
  6547.  rts
  6548. bothendsinfront:
  6549.  
  6550.  move.l #OnScreen,a2
  6551.  move.w (a2,d0.w*2),d0
  6552.  bge.s okleftend
  6553.  moveq #0,d0
  6554. okleftend:
  6555.  move.w (a2,d1.w*2),d1
  6556.  bgt.s somevis
  6557.  rts
  6558. somevis:
  6559.  cmp.w RIGHTX,d0
  6560.  blt.s somevis2
  6561.  rts
  6562. somevis2:
  6563.  cmp.w RIGHTX,d1
  6564.  blt.s okrightend
  6565.  move.w RIGHTX,d1
  6566.  subq #1,d1
  6567. okrightend:
  6568.  
  6569.  sub.w d0,d1
  6570.  blt.s wrongbloodywayround
  6571.  move.l TexturePal,a4
  6572.  move.l #objintocop,a1
  6573.  lea (a1,d0.w*2),a1
  6574.  
  6575.  move.l frompt,a3
  6576.  move.w #104*4,d6
  6577.  move.w #79,d2
  6578. lacross:
  6579.  move.w d2,d3
  6580.  move.l a3,a2
  6581.  adda.w (a1)+,a2
  6582. ldown:
  6583.  add.w d6,a2
  6584.  move.w (a2),d7
  6585.  move.w (a4,d7.w*2),(a2)
  6586.  dbra d3,ldown
  6587.  dbra d1,lacross
  6588.  
  6589. wrongbloodywayround:
  6590.  
  6591.  rts
  6592.  
  6593. FaceToPlace: dc.w 0
  6594.  
  6595. Cheese:
  6596.  dc.w 4,15
  6597.  
  6598. FacesList:
  6599.  dc.w 0,4*4
  6600.  dc.w 1,2*4
  6601.  dc.w 0,2*4
  6602.  dc.w 2,2*4
  6603.  dc.w 0,2*4
  6604.  dc.w 1,3*4
  6605.  dc.w 0,2*4
  6606.  dc.w 2,3*4
  6607.  dc.w 0,5*4
  6608.  dc.w 1,2*4
  6609.  dc.w 0,2*4
  6610.  dc.w 2,2*4
  6611.  dc.w 0,2*4
  6612.  dc.w 1,2*4
  6613.  dc.w 0,2*4
  6614.  dc.w 2,3*4
  6615.  dc.w 0,1*4
  6616.  dc.w 1,3*4
  6617.  dc.w 0,1*4
  6618.  dc.w 2,3*4
  6619.  dc.w 0,1*4
  6620.  
  6621. EndOfFacesList:
  6622.  
  6623. FacesPtr:
  6624.  dc.l FacesList
  6625. FacesCounter:
  6626.  dc.w 0
  6627. Expression:
  6628.  dc.w 0
  6629.  
  6630.  
  6631. Energy:
  6632.  dc.w 191
  6633. OldEnergy:
  6634.  dc.w 191
  6635. Ammo: dc.w 63
  6636. OldAmmo: dc.w 63
  6637.  
  6638. FullEnergy:
  6639. ; move.w #127,Energy
  6640. ; move.w #127,OldEnergy
  6641. ; move.l #health,a0
  6642. ; move.l #borders,a1
  6643. ; add.l #25*8*2+6,a1
  6644. ; lea 2592(a1),a2
  6645. ; move.w #127,d0
  6646. ;PutInFull:
  6647. ; move.b (a0)+,(a1)
  6648. ; move.b (a0)+,8(a1)
  6649. ; add.w #16,a1
  6650. ; move.b (a0)+,(a2)
  6651. ; move.b (a0)+,8(a2)
  6652. ; add.w #16,a2
  6653. ; dbra d0,PutInFull
  6654.  
  6655.  rts
  6656.  
  6657. ;EnergyBar:
  6658.  
  6659.  move.w Energy,d0
  6660.  bgt.s .noeneg
  6661.  move.w #0,d0
  6662. .noeneg:
  6663.  move.w d0,Energy
  6664.  
  6665.  cmp.w OldEnergy,d0
  6666.  bne.s gottochange
  6667.  
  6668. NoChange
  6669.  rts
  6670.  
  6671. gottochange:
  6672.   
  6673.  blt LessEnergy
  6674.  cmp.w #127,Energy
  6675.  blt.s NotMax
  6676.  move.w #127,Energy
  6677. NotMax:
  6678.  
  6679.  move.w Energy,d0
  6680.  move.w OldEnergy,d2
  6681.  sub.w d0,d2
  6682.  beq.s NoChange    
  6683.  neg.w d2
  6684.  
  6685.  move.w #127,d3
  6686.  sub.w d0,d3
  6687.  
  6688.  move.l #health,a0
  6689.  lea (a0,d3.w*4),a0
  6690. ; move.l #borders+25*16+6,a1
  6691.  lsl.w #4,d3
  6692.  add.w d3,a1
  6693.  lea 2592(a1),a2
  6694.  
  6695. EnergyRise:
  6696.  move.b (a0)+,(a1)
  6697.  move.b (a0)+,8(a1)
  6698.  add.w #16,a1
  6699.  move.b (a0)+,(a2)
  6700.  move.b (a0)+,8(a2)
  6701.  add.w #16,a2
  6702.  subq #1,d2
  6703.  bgt.s EnergyRise
  6704.  
  6705.  move.w Energy,OldEnergy
  6706.  
  6707.  rts 
  6708.  
  6709. LessEnergy: 
  6710.  move.w OldEnergy,d2
  6711.  sub.w d0,d2
  6712.  
  6713.  move.w #127,d3
  6714.  sub.w OldEnergy,d3
  6715.  
  6716. ; move.l #borders+25*16+6,a1
  6717.  asl.w #4,d3
  6718.  add.w d3,a1
  6719.  lea 2592(a1),a2
  6720.  
  6721. EnergyDrain:
  6722.  move.b #0,(a1)
  6723.  move.b #0,8(a1)
  6724.  move.b #0,(a2)
  6725.  move.b #0,8(a2)
  6726.  add.w #16,a1
  6727.  add.w #16,a2
  6728.  subq #1,d2
  6729.  bgt.s EnergyDrain
  6730.  
  6731.  move.w Energy,OldEnergy
  6732.  
  6733.  rts 
  6734.  
  6735. firstdigit: dc.b 0
  6736. secdigit: dc.b 0
  6737. thirddigit: dc.b 0
  6738.  
  6739.  even
  6740.  
  6741. gunny: dc.w 0
  6742.  
  6743. AmmoBar:
  6744.  
  6745. * Do guns first.
  6746.  
  6747.  move.l #borderchars,a4
  6748.  move.b p1_gunselected,d0 
  6749.  move.l #PLAYERONEGUNS,a5
  6750.  cmp.b #'s',mors
  6751.  bne.s .notplr2
  6752.  move.l #PLAYERTWOGUNS,a5
  6753.  move.b p2_gunselected,d0
  6754. .notplr2:
  6755.  
  6756.  move.b d0,gunny
  6757.  
  6758.  move.w #9,d2
  6759.  moveq #0,d0
  6760. putingunnums:
  6761.  move.w #4,d1
  6762.  move.l a4,a0
  6763.  cmp.b gunny,d0
  6764.  bne.s .notsel
  6765.  add.l #5*10*8*2,a0
  6766.  addq #2,a5
  6767.  bra.s .donesel
  6768. .notsel:
  6769.  tst.w (a5)+
  6770.  beq.s .donesel
  6771.  add.l #5*10*8,a0
  6772. .donesel:
  6773.  move.l SCRNDRAWPT,a1
  6774.  add.w d0,a1
  6775.  add.l #3+(240*40),a1
  6776.  bsr DRAWDIGIT
  6777.  addq #1,d0
  6778.  dbra d2,putingunnums
  6779.  
  6780.  move.w Ammo,d0
  6781.  ext.l d0
  6782.  divs #10,d0
  6783.  swap d0
  6784.  move.b d0,thirddigit
  6785.  swap d0
  6786.  ext.l d0
  6787.  divs #10,d0
  6788.  move.b d0,firstdigit
  6789.  swap d0
  6790.  move.b d0,secdigit
  6791.  
  6792.  move.l #borderchars+15*8*10,a0
  6793.  cmp.w #10,Ammo
  6794.  blt.s .notsmallamo
  6795.  add.l #7*8*10,a0
  6796. .notsmallamo:
  6797.  
  6798.  move.l SCRNDRAWPT,a1
  6799.  add.l #20+238*40,a1
  6800.  move.b firstdigit,d0
  6801.  move.w #6,d1
  6802.  bsr DRAWDIGIT
  6803.  
  6804.  move.l SCRNDRAWPT,a1
  6805.  add.l #21+238*40,a1
  6806.  move.b secdigit,d0
  6807.  move.w #6,d1
  6808.  bsr DRAWDIGIT
  6809.  
  6810.  move.l SCRNDRAWPT,a1
  6811.  add.l #22+238*40,a1
  6812.  move.b thirddigit,d0
  6813.  move.w #6,d1
  6814.  bsr DRAWDIGIT
  6815.  
  6816.  rts
  6817.  
  6818. EnergyBar:
  6819.  move.w Energy,d0
  6820.  bge.s .okpo
  6821.  moveq #0,d0 
  6822. .okpo:
  6823.  
  6824.  ext.l d0
  6825.  divs #10,d0
  6826.  swap d0
  6827.  move.b d0,thirddigit
  6828.  swap d0
  6829.  ext.l d0
  6830.  divs #10,d0
  6831.  move.b d0,firstdigit
  6832.  swap d0
  6833.  move.b d0,secdigit
  6834.  
  6835.  move.l #borderchars+15*8*10,a0
  6836.  cmp.w #10,Energy
  6837.  blt.s .notsmallamo
  6838.  add.l #7*8*10,a0
  6839. .notsmallamo:
  6840.  
  6841.  move.l SCRNDRAWPT,a1
  6842.  add.l #34+238*40,a1
  6843.  move.b firstdigit,d0
  6844.  move.w #6,d1
  6845.  bsr DRAWDIGIT
  6846.  
  6847.  move.l SCRNDRAWPT,a1
  6848.  add.l #35+238*40,a1
  6849.  move.b secdigit,d0
  6850.  move.w #6,d1
  6851.  bsr DRAWDIGIT
  6852.  
  6853.  move.l SCRNDRAWPT,a1
  6854.  add.l #36+238*40,a1
  6855.  move.b thirddigit,d0
  6856.  move.w #6,d1
  6857.  bsr DRAWDIGIT
  6858.  
  6859.  move.l SCRNSHOWPT,a1
  6860.  add.l #34+238*40,a1
  6861.  move.b firstdigit,d0
  6862.  move.w #6,d1
  6863.  bsr DRAWDIGIT
  6864.  
  6865.  move.l SCRNSHOWPT,a1
  6866.  add.l #35+238*40,a1
  6867.  move.b secdigit,d0
  6868.  move.w #6,d1
  6869.  bsr DRAWDIGIT
  6870.  
  6871.  move.l SCRNSHOWPT,a1
  6872.  add.l #36+238*40,a1
  6873.  move.b thirddigit,d0
  6874.  move.w #6,d1
  6875.  bsr DRAWDIGIT
  6876.  
  6877.  
  6878.  rts
  6879.  
  6880.  
  6881. DRAWDIGIT:
  6882.  ext.w d0
  6883.  lea (a0,d0.w),a2
  6884. charlines:
  6885.  lea 30720(a1),a3 
  6886.  move.b (a2),(a1)
  6887.  move.b 10(a2),10240(a1)
  6888.  move.b 20(a2),20480(a1)
  6889.  move.b 30(a2),(a3)
  6890.  move.b 40(a2),10240(a3)
  6891.  move.b 50(a2),20480(a3)
  6892.  lea 30720(a3),a3
  6893.  move.b 60(a2),(a3)
  6894.  move.b 70(a2),10240(a3)
  6895.  
  6896.  add.w #10*8,a2
  6897.  add.w #40,a1
  6898.  dbra d1,charlines
  6899.  
  6900.  rts
  6901.  
  6902. borderchars: incbin "ab3:includes/bordercharsRAW"
  6903.  
  6904. NARRATOR:
  6905.  
  6906. ; sub.w #1,NARRTIME
  6907. ; bge .NOCHARYET
  6908. ; move.w #3,NARRTIME
  6909.  
  6910.  move.l #SCROLLSCRN,d1
  6911.  move.w d1,scroll
  6912.  swap d1
  6913.  move.w d1,scrolh
  6914.  
  6915.  move.w SCROLLTIMER,d0
  6916.  subq #1,d0
  6917.  move.w d0,SCROLLTIMER
  6918.  cmp.w #40,d0
  6919.  bge .NOCHARYET
  6920.  tst.w d0
  6921.  bge.s .okcha
  6922.  
  6923.  move.w #150,SCROLLTIMER
  6924.  bra .NOCHARYET
  6925.  
  6926. .okcha:
  6927.  
  6928.  move.l #SCROLLSCRN,a0
  6929.  add.w SCROLLXPOS,a0
  6930.  
  6931.  moveq #1,d7
  6932. .doachar: 
  6933.  
  6934.  move.l SCROLLPOINTER,a1
  6935.  moveq #0,d1
  6936.  move.b (a1)+,d1    ; character
  6937.  move.l a1,d2
  6938.  cmp.l ENDSCROLL,d2
  6939.  blt.s .notrestartscroll
  6940.  move.l #BLANKSCROLL,a1
  6941.  move.l #BLANKSCROLL+80,ENDSCROLL
  6942. .notrestartscroll
  6943.  move.l a1,SCROLLPOINTER
  6944.  
  6945.  move.l #SCROLLCHARS,a1
  6946.  asl.w #3,d1
  6947.  add.w d1,a1
  6948.  
  6949.  move.b (a1)+,(a0)
  6950.  move.b (a1)+,80(a0)
  6951.  move.b (a1)+,80*2(a0)
  6952.  move.b (a1)+,80*3(a0)
  6953.  move.b (a1)+,80*4(a0)
  6954.  move.b (a1)+,80*5(a0)
  6955.  move.b (a1)+,80*6(a0)
  6956.  move.b (a1)+,80*7(a0)
  6957.  
  6958.  addq #1,a0
  6959.  dbra d7,.doachar
  6960.  
  6961.  move.w SCROLLXPOS,d0
  6962.  addq #2,d0
  6963.  move.w d0,SCROLLXPOS
  6964.  cmp.w #80,d0
  6965.  blt .NOCHARYET
  6966.  move.w #0,SCROLLXPOS
  6967.  
  6968. .NOCHARYET:
  6969.  rts
  6970.  
  6971. ; cmp.w OldAmmo,d0
  6972. ; bne.s .gottochange
  6973.  
  6974. NARRTIME: dc.w 5
  6975.  
  6976. SCROLLCHARS: incbin "ab3:includes/scrollfont"
  6977.  
  6978. .NoChange
  6979.  rts
  6980.  
  6981. .gottochange:
  6982.   
  6983.  blt LessAmmo
  6984.  cmp.w #63,Ammo
  6985.  blt.s .NotMax
  6986.  move.w #63,Ammo
  6987. .NotMax:
  6988.  
  6989.  move.w Ammo,d0
  6990.  move.w OldAmmo,d2
  6991.  sub.w d0,d2
  6992.  beq.s .NoChange
  6993.  neg.w d2
  6994.  
  6995.  move.w #63,d3
  6996.  sub.w d0,d3
  6997.  
  6998.  move.l #Ammunition,a0
  6999.  lea (a0,d3.w*8),a0
  7000. ; move.l #borders+5184+25*16+1,a1
  7001.  lsl.w #5,d3
  7002.  add.w d3,a1
  7003.  lea 2592(a1),a2
  7004.  
  7005. AmmoRise:
  7006.  move.b (a0)+,(a1)
  7007.  move.b (a0)+,8(a1)
  7008.  add.w #16,a1
  7009.  move.b (a0)+,(a2)
  7010.  move.b (a0)+,8(a2)
  7011.  add.w #16,a2
  7012.  move.b (a0)+,(a1)
  7013.  move.b (a0)+,8(a1)
  7014.  add.w #16,a1
  7015.  move.b (a0)+,(a2)
  7016.  move.b (a0)+,8(a2)
  7017.  add.w #16,a2
  7018.  subq #1,d2
  7019.  bgt.s AmmoRise
  7020.  
  7021.  move.w Ammo,OldAmmo
  7022.  
  7023.  rts 
  7024.  
  7025.  
  7026. LessAmmo: 
  7027.  move.w OldAmmo,d2
  7028.  sub.w d0,d2
  7029.  
  7030.  move.w #63,d3
  7031.  sub.w OldAmmo,d3
  7032.  
  7033. ; move.l #borders++5184+25*16+1,a1
  7034.  asl.w #5,d3
  7035.  add.w d3,a1
  7036.  lea 2592(a1),a2
  7037.  
  7038. AmmoDrain:
  7039.  move.b #0,(a1)
  7040.  move.b #0,8(a1)
  7041.  move.b #0,(a2)
  7042.  move.b #0,8(a2)
  7043.  add.w #16,a1
  7044.  add.w #16,a2
  7045.  move.b #0,(a1)
  7046.  move.b #0,8(a1)
  7047.  move.b #0,(a2)
  7048.  move.b #0,8(a2)
  7049.  add.w #16,a1
  7050.  add.w #16,a2
  7051.  subq #1,d2
  7052.  bgt.s AmmoDrain
  7053.  
  7054.  move.w Ammo,OldAmmo
  7055.  
  7056.  rts 
  7057.  
  7058. nulop:
  7059.  move.w #$0010,$dff000+intreq
  7060.  rte
  7061.  
  7062. doanything: dc.w 0
  7063.  
  7064. end:
  7065. ;     _break #0
  7066.  
  7067.  move.l #$dff000,a6
  7068.  move.w #$f,$dff000+dmacon
  7069. waitfortop22:
  7070.  btst.b #0,intreqrl(a6)
  7071.  beq waitfortop22
  7072. waitfortop222:
  7073.  btst.b #0,intreqrl(a6)
  7074.  beq waitfortop222
  7075.  
  7076.  clr.b dosounds
  7077.  clr.b doanything
  7078.  
  7079.  move.w PLAYERONEHEALTH,Energy
  7080.  cmp.b #'s',mors
  7081.  bne.s .notsl
  7082.  move.w PLAYERTWOHEALTH,Energy
  7083. .notsl:
  7084.  
  7085.  move.l drawpt,d0
  7086.  move.l olddrawpt,drawpt
  7087.  move.l d0,olddrawpt
  7088.  
  7089. ; cmp.b #'b',Prefsfile+3
  7090. ; bne.s .noback
  7091. ; jsr mt_end
  7092. ;.noback
  7093.  
  7094.  tst.w Energy
  7095.  bgt.s wevewon
  7096.  move.w #0,Energy
  7097.  bsr EnergyBar
  7098.  
  7099.  move.l #gameover,mt_data
  7100.  st UseAllChannels
  7101.  clr.b reachedend
  7102.  jsr mt_init
  7103. playgameover:
  7104.  move.l #$dff000,a6
  7105. waitfortop2:
  7106.  
  7107.     
  7108.  btst.b #0,intreqrl(a6)
  7109.  beq waitfortop2
  7110.  move.w #$1,intreq(a6)
  7111.  
  7112.     
  7113.  jsr mt_music
  7114.  
  7115.  
  7116.     
  7117.  tst.b reachedend
  7118.  beq.s playgameover
  7119.  
  7120.  bra wevelost
  7121.  
  7122.  
  7123. wevewon:
  7124.  
  7125.  move.w #$f,$dff000+dmacon
  7126.  
  7127.  bsr EnergyBar
  7128.  
  7129.  cmp.b #'n',mors
  7130.  bne.s .nonextlev
  7131.  add.w #1,MAXLEVEL
  7132.  st FINISHEDLEVEL
  7133.  
  7134.  cmp.w #16,MAXLEVEL
  7135.  bne .nonextlev
  7136.  
  7137.  jmp ENDGAMESCROLL
  7138. .nonextlev:
  7139.  
  7140.  move.l #welldone,mt_data
  7141.  st UseAllChannels
  7142.  clr.b reachedend
  7143.  
  7144.  jsr mt_init
  7145. playwelldone:
  7146.  move.l #$dff000,a6
  7147. waitfortop3:
  7148.  btst.b #0,intreqrl(a6)
  7149.  beq waitfortop3
  7150.  move.w #$1,intreq(a6)
  7151.  
  7152.  jsr mt_music
  7153.  
  7154.  tst.b reachedend
  7155.  beq.s playwelldone
  7156.  
  7157. wevelost:
  7158.  
  7159.  PROTICHECK a0
  7160.  
  7161.  jmp closeeverything 
  7162.  
  7163. endnomusic
  7164.  clr.b doanything
  7165.  
  7166.  
  7167. ; cmp.b #'b',Prefsfile+3
  7168. ; bne.s .noback
  7169. ; jsr mt_end
  7170. ;.noback
  7171. *******************************
  7172. ; cmp.b #'n',mors
  7173. ; bne.s .nonextlev
  7174. ; cmp.w #15,MAXLEVEL
  7175. ; bge.s .nonextlev
  7176. ; add.w #1,MAXLEVEL
  7177. ; st FINISHEDLEVEL
  7178. ;.nonextlev:
  7179. ******************************
  7180.  
  7181.  jmp closeeverything
  7182.  
  7183. do32:
  7184.  move.w #31,d7
  7185.  move.w #$180,d1
  7186. across:
  7187.  move.w d1,(a1)+
  7188.  move.w d1,(a3)+
  7189.  move.w #0,(a1)+ 
  7190.  move.w #0,(a3)+
  7191.  add.w #2,d1
  7192.  dbra d7,across
  7193.  rts
  7194.  
  7195. ;string:
  7196. ;    dc.b    'credits',0
  7197.  
  7198. ENDGAMESCROLL:
  7199.  
  7200.  move.w #$fff,MIXCOLL
  7201.  
  7202.  move.w #$1cc1,BOTOFTXT
  7203.  
  7204.  jsr CLRTWEENSCRN
  7205.  
  7206.  move.l #TEXTCOP,$dff080
  7207.  
  7208.  move.l #ENDGAMETEXTy,a0
  7209.  
  7210.  
  7211. SCROLLUP16LINES:
  7212.  
  7213.  move.w #15,d0
  7214.  
  7215. do16
  7216.  move.l #$dff000,a6
  7217.  
  7218.  move.w #0,d6
  7219.  move.w #7,d7
  7220.  
  7221.  move.l #SCROLLSHADES,a5
  7222.  
  7223. fadeupp:
  7224.  
  7225.  move.w (a5,d6.w*2),TOPCOLL
  7226.  move.w (a5,d7.w*2),TXTCOLL
  7227.  
  7228.  
  7229. .wtup
  7230.  btst #5,intreqrl(a6)
  7231.  beq.s .wtup
  7232.  move.w #$20,intreq(a6)
  7233.  
  7234.  add.w #1,d6
  7235.  sub.w #1,d7
  7236.  bne fadeupp
  7237.  
  7238. .wtup2
  7239.  btst #5,intreqrl(a6)
  7240.  beq.s .wtup2
  7241.  move.w #$20,intreq(a6)
  7242.  
  7243.  move.w #0,TOPCOLL
  7244.  move.w #$fff,TXTCOLL
  7245.  
  7246.  WB
  7247.  
  7248.  move.l TEXTSCRN,d1
  7249.  move.l d1,bltdpt(a6)
  7250.  add.l #80,d1
  7251.  move.l d1,bltapt(a6)
  7252.  move.w #$09f0,bltcon0(a6)
  7253.  move.w #$0,bltcon1(a6)
  7254.  move.w #0,bltdmod(a6)
  7255.  move.w #0,bltamod(a6)
  7256.  move.l #-1,bltafwm(a6)
  7257.  
  7258.  move.w #255*64+40,bltsize(a6)
  7259.  
  7260.  WB
  7261.  
  7262.  dbra d0,do16
  7263.  
  7264.  move.l TEXTSCRN,a1
  7265.  move.w #15,d0
  7266.  jsr DRAWLINEOFTEXT
  7267.  
  7268.  add.l #82,a0
  7269.  cmp.l #ENDENDGAMETEXT,a0
  7270.  blt SCROLLUP16LINES
  7271.  
  7272.  move.l #ENDGAMETEXTy,a0
  7273.  bra SCROLLUP16LINES
  7274.  
  7275. SCROLLSHADES:
  7276.  dc.w 0
  7277.  dc.w $333
  7278.  dc.w $666
  7279.  dc.w $888
  7280.  dc.w $aaa
  7281.  dc.w $ccc
  7282.  dc.w $ddd
  7283.  dc.w $eee
  7284.  
  7285. ENDGAMETEXTy:
  7286. ;          12345678901234567890123456789012345678901234567890123456789012345678901234567890
  7287.  dc.b 0,0,"                                                                                "
  7288.  dc.b 0,1,"As the beast and its four servants die, a breathless silence falls, broken      "
  7289.  dc.b 0,1,"only by the hammering of my own heart in my chest.                              "
  7290.  dc.b 0,1,"I run to the now open exit, and out into the maze of corridors through which I  "
  7291.  dc.b 0,1,"came. I encounter many, many aliens, lying twitching on the ground, or utterly  "
  7292.  dc.b 0,1,"still with glazed eyes and green froth drying on their lips. Many seem to have  "
  7293.  dc.b 0,1,"turned their weapons on themselves, unable to bear either the pain or the       "
  7294.  dc.b 0,1,"sudden silence in their minds.                                                  "
  7295.  dc.b 0,0,"                                                                                "
  7296.  dc.b 0,1,"It takes me several hours to locate a working teleport to take me back aboard   "
  7297.  dc.b 0,1,"the orbiting alien ship. The scene there is the same; hordes of aliens, either  "
  7298.  dc.b 0,1,"dead or catatonic, I cannot tell.                                               "
  7299.  dc.b 0,1,"I walk slowly, exhausted, back to the INDOMITABLE, averting my eyes from the    "
  7300.  dc.b 0,1,"pitiful scenes around me. I know that my work is not finished yet.              "
  7301.  dc.b 0,1,"Once aboard, I make my way to the bridge. I manage to restart the main power    "
  7302.  dc.b 0,1,"generators and get basic navigation back on-line. Working from the memories     "
  7303.  dc.b 0,1,"implanted by the dying marine, I painstakingly program the computer to deal     "
  7304.  dc.b 0,1,"the killing blow to the enemy. At last the task is finished. The ship hums into "
  7305.  dc.b 0,1,"life, accellerating slowly out of orbit, towing the massive alien craft and     "
  7306.  dc.b 0,1,"its mindless cargo behind it.                                                   "
  7307.  dc.b 0,1,"As the image of the alien sun grows in the viewscreen, I think about what I     "
  7308.  dc.b 0,1,"have seen. Fragments of technology, stolen from civilisations - how long ago?   "
  7309.  dc.b 0,1,"How long since they were exterminated by these parasites? And how many more     "
  7310.  dc.b 0,1,"if they are allowed to continue?                                                "
  7311.  dc.b 0,1,"The sun looms hideously large before me, seeming at the last moment to slip to  "
  7312.  dc.b 0,1,"one side as the cruiser slingshots itself through the immense gravity well,     "
  7313.  dc.b 0,1,"its speed doubling and doubling again. The ship shudders and groans as the      "
  7314.  dc.b 0,1,"ponderous mass of the alien ship tries to tear itself free. I feel a distant    "
  7315.  dc.b 0,1,"twinge of curiosity as to whether it will succeed.                              "
  7316.  dc.b 0,1,"The navigation computer chatters quietly to itself as it makes tiny             "
  7317.  dc.b 0,1,"course corrections, bringing the payload to bear on its target. I only sit,     "
  7318.  dc.b 0,1,"watching blankly as we hurtle back towards the planet. The navicom beeps        "
  7319.  dc.b 0,1,"quietly to signal the blowing of the explosive bolts holding the docking ring.  "
  7320.  dc.b 0,1,"So great is our speed that the alien ship does not receed, but simply vanishes  "
  7321.  dc.b 0,1,"from sight, tracked only on the readouts of the computers in front of me.       "
  7322.  dc.b 0,1,"One readout in particular occupies my attention. Red numbers spin towards zero  "
  7323.  dc.b 0,1,"as my invisible agent of destruction spins towards oblivion. Three digits, now  "
  7324.  dc.b 0,1,"two, and now only one. I shift my attention to the image of the alien world,    "
  7325.  dc.b 0,1,"receeding behind my ship.                                                       "
  7326.  dc.b 0,0,"                                                                                "
  7327.  dc.b 0,1,"Three...                                                                        "
  7328.  dc.b 0,0,"                                                                                "
  7329.  dc.b 0,1,"Two...                                                                          "
  7330.  dc.b 0,0,"                                                                                "
  7331.  dc.b 0,1,"One...                                                                          "
  7332.  dc.b 0,0,"                                                                                "
  7333.  dc.b 0,1,"Zero.                                                                           "
  7334.  dc.b 0,0,"                                                                                "
  7335.  dc.b 0,0,"                                                                                "
  7336.  dc.b 0,0,"                                                                                "
  7337.  dc.b 0,0,"                                                                                "
  7338.  dc.b 0,1,"Travelling at nearly a quarter of the speed of light, the alien ship smashed    "
  7339.  dc.b 0,1,"into the planet, flashing past the useless orbital defences which should have   "
  7340.  dc.b 0,1,"neutralized it millions of miles earlier. It passed through the twenty miles    "
  7341.  dc.b 0,1,"of atmosphere in a little more than one ten-thousandth of a second. The air     "
  7342.  dc.b 0,1,"directly beneath had no time to be pushed out of the way, and in another        "
  7343.  dc.b 0,1,"tenth of a second it was a molecule-thick layer a thousand miles below the      "
  7344.  dc.b 0,1,"planet's surface.                                                               "
  7345.  dc.b 0,1,"Such was the heat and pressure caused by the impact, that part of the molten    "
  7346.  dc.b 0,1,"core of the planet underwent nuclear fusion, vapourising thousands of billions  "
  7347.  dc.b 0,1,"of tonnes of surrounding material. This expanding superhot plasma cloud forced  "
  7348.  dc.b 0,1,"its way up through the mantle and crust, fracturing the surface of the planet,  "
  7349.  dc.b 0,1,"blowing continent-sized chunks into space and heating the tortured atmosphere   "
  7350.  dc.b 0,1,"to ignition point. Within two minutes of impact, the doomed planet was a        "
  7351.  dc.b 0,1,"misshapen, incandescent ball, with burning fragments spinning deceptively       "
  7352.  dc.b 0,1,"slowly in their brief orbits before re-impacting with fantastic, majestic       "
  7353.  dc.b 0,1,"force.                                                                          "
  7354.  dc.b 0,0,"                                                                                "
  7355.  dc.b 0,0,"                                                                                "
  7356.  dc.b 0,0,"                                                                                "
  7357.  dc.b 0,0,"                                                                                "
  7358.  dc.b 0,1,"In a matter of weeks, the small amount of matter which had undergone fusion     "
  7359.  dc.b 0,1,"burned itself out, but the planet still glowed sullenly from a million cracks   "
  7360.  dc.b 0,1,"and holes in the crust, as it would continue to do for millions of years to     "
  7361.  dc.b 0,1,"come. The world was barren and dead, and the creatures who once roamed its      "
  7362.  dc.b 0,1,"surface no more than a memory in the mind of one man, sleeping dreamlessly      "
  7363.  dc.b 0,1,"as the invisible speck of his ship sped silently on, towards home.              "
  7364.  dc.b 0,0,"                                                                                "
  7365.  dc.b 0,0,"                                                                                "
  7366.  dc.b 0,0,"                                                                                "
  7367.  dc.b 0,0,"                                                                                "
  7368.  dc.b 0,0,"                                                                                "
  7369.  dc.b 0,0,"                                                                                "
  7370.  dc.b 0,0,"                                                                                "
  7371.  dc.b 0,0,"                                                                                "
  7372.  dc.b 0,0,"                                                                                "
  7373.  dc.b 0,0,"                                                                                "
  7374.  dc.b 0,0,"                                                                                "
  7375.  dc.b 0,0,"                                                                                "
  7376.  dc.b 0,0,"                                                                                "
  7377.  dc.b 0,0,"                                                                                "
  7378.  dc.b 0,0,"                                                                                "
  7379.  dc.b 0,0,"                                                                                "
  7380.  dc.b 0,1,"ALIEN BREED 3D II                                                               "
  7381.  dc.b 0,1,"THE KILLING GROUNDS                                                             "
  7382.  dc.b 0,0,"                                                                                "
  7383.  dc.b 0,0,"                                                                                "
  7384.  dc.b 0,1,"A Team 17 Game                                                                  "
  7385.  dc.b 0,0,"                                                                                "
  7386.  dc.b 0,1,"Produced in association with OCEAN Software                                     "
  7387.  dc.b 0,0,"                                                                                "
  7388.  dc.b 0,0,"                                                                                "
  7389.  dc.b 0,1,"Game Design, Game Code, Editor Code and In-Game Text                            "
  7390.  dc.b 0,0,"                                                                                "
  7391.  dc.b 0,1,"Andrew Clitheroe                                                                "
  7392.  dc.b 0,0,"                                                                                "
  7393.  dc.b 0,0,"                                                                                "
  7394.  dc.b 0,1,"Graphics                                                                        "
  7395.  dc.b 0,0,"                                                                                "
  7396.  dc.b 0,1,"Michael Green                                                                   "
  7397.  dc.b 0,0,"                                                                                "
  7398.  dc.b 0,0,"                                                                                "
  7399.  dc.b 0,1,"3D Object Designs, 3D Editors, Serial and OS code                               "
  7400.  dc.b 0,0,"                                                                                "
  7401.  dc.b 0,1,"Charles Blessing                                                                "
  7402.  dc.b 0,0,"                                                                                "
  7403.  dc.b 0,0,"                                                                                "
  7404.  dc.b 0,1,"Music                                                                           "
  7405.  dc.b 0,0,"                                                                                "
  7406.  dc.b 0,1,"Ben Chanter                                                                     "
  7407.  dc.b 0,0,"                                                                                "
  7408.  dc.b 0,0,"                                                                                "
  7409.  dc.b 0,1,"Project Manager                                                                 "
  7410.  dc.b 0,0,"                                                                                "
  7411.  dc.b 0,1,"Phil Quirke-Webster                                                             "
  7412.  dc.b 0,0,"                                                                                "
  7413.  dc.b 0,0,"                                                                                "
  7414.  dc.b 0,1,"Playtesting                                                                     "
  7415.  dc.b 0,0,"                                                                                "
  7416.  dc.b 0,1,"Phil and the Wolves                                                             "
  7417.  dc.b 0,0,"                                                                                "
  7418.  dc.b 0,0,"                                                                                "
  7419.  dc.b 0,1,"Additional Graphics                                                             "
  7420.  dc.b 0,0,"                                                                                "
  7421.  dc.b 0,1,"Pete Lyons                                                                      "
  7422.  dc.b 0,0,"                                                                                "
  7423.  dc.b 0,0,"                                                                                "
  7424.  
  7425.  
  7426. ENDENDGAMETEXT:
  7427.  
  7428.  
  7429. ;
  7430. ;    move.l    4.w,a6
  7431. ;    move.l    #string,d1
  7432. ;    moveq    #0,d2
  7433. ;    moveq    #0,d3
  7434. ;    jsr    _LVOExecute(a6)
  7435.  
  7436. ; include "endscroll.s"
  7437.  
  7438. ***********************************
  7439.  include "ab3:source_4000/CD32JOY"
  7440.  
  7441.  
  7442.  
  7443. *************************************
  7444. * Set left and right clip values
  7445. *************************************
  7446.  
  7447.  
  7448.  
  7449. NEWsetlclip:
  7450.  move.l #OnScreen,a1
  7451.  move.l #Rotated,a2
  7452.  move.l CONNECT_TABLE,a3
  7453.  move.l Points,a4
  7454.  
  7455.  move.w (a0),d0
  7456.  bge.s .notignoreleft
  7457.  
  7458. ; move.l #0,(a6)
  7459.  
  7460.  bra .leftnotoktoclip
  7461. .notignoreleft:
  7462.  
  7463.  move.w 6(a2,d0*8),d3    ; left z val
  7464.  bgt.s .leftclipinfront
  7465.  addq #2,a0
  7466.  rts
  7467.  
  7468.  tst.w 6(a2,d0*8)
  7469.  bgt.s .leftnotoktoclip
  7470. .ignoreboth:
  7471. ; move.l #0,(a6)
  7472. ; move.l #96*65536,4(a6)
  7473.  move.w #0,leftclip
  7474.  move.w RIGHTX,rightclip
  7475.  addq #8,a6
  7476.  addq #2,a0
  7477.  rts
  7478.  
  7479. .leftclipinfront:
  7480.  move.w (a1,d0*2),d1    ; left x on screen
  7481.  move.w (a0),d2
  7482.  move.w 2(a3,d2.w*4),d2
  7483.  move.w (a1,d2.w*2),d2
  7484.  cmp.w d1,d2
  7485.  bgt.s .leftnotoktoclip
  7486.  
  7487.  
  7488. *************************************
  7489.  
  7490. ; move.w 2(a3,d0.w*4),d6
  7491. ; move.w (a4,d0.w*4),d2
  7492. ; move.w 2(a4,d0.w*4),d3
  7493. ; move.w (a4,d6.w*4),d4
  7494. ; move.w 2(a4,d6.w*4),d5
  7495. ;
  7496. ; sub.w d2,d4    ;dx
  7497. ; sub.w d3,d5    ;dz
  7498. ; move.w xoff,d0
  7499. ; move.w zoff,d6
  7500. ; sub.w d2,d0
  7501. ; sub.w d3,d6
  7502. ; muls d0,d4
  7503. ; muls d6,d5
  7504. ; add.l d4,d5
  7505. ; bge.s .leftnotoktoclip
  7506.  
  7507. *************************************
  7508.  
  7509.  
  7510.  
  7511. ; move.w d1,(a6)
  7512. ; move.w d3,2(a6)
  7513.  cmp.w leftclip,d1
  7514.  ble.s .leftnotoktoclip
  7515.  move.w d1,leftclip
  7516. .leftnotoktoclip:
  7517.  
  7518.  addq #2,a0
  7519.  
  7520.  rts
  7521.  
  7522. NEWsetrclip
  7523.  move.l #OnScreen,a1
  7524.  move.l #Rotated,a2
  7525.  move.l CONNECT_TABLE,a3
  7526.  move.w (a0),d0
  7527.  bge.s .notignoreright
  7528. ; move.w #96,4(a6)
  7529. ; move.w #0,6(a6)
  7530.  move.w #0,d4
  7531.  bra .rightnotoktoclip
  7532. .notignoreright:
  7533.  move.w 6(a2,d0*8),d4    ; right z val
  7534.  bgt.s .rightclipinfront
  7535. ; move.w #96,4(a6)
  7536. ; move.w #0,6(a6)
  7537.  bra.s .rightnotoktoclip
  7538.  
  7539. .rightclipinfront:
  7540.  move.w (a1,d0*2),d1    ; right x on screen
  7541.  move.w (a0),d2
  7542.  move.w (a3,d2.w*4),d2
  7543.  move.w (a1,d2.w*2),d2
  7544.  cmp.w d1,d2
  7545.  blt.s .rightnotoktoclip
  7546. ; move.w d1,4(a6)
  7547. ; move.w d4,6(a6)
  7548.  
  7549.  
  7550. *************************************
  7551.  
  7552. ; move.w (a3,d0.w*4),d6
  7553. ; move.w (a4,d0.w*4),d2
  7554. ; move.w 2(a4,d0.w*4),d3
  7555. ; move.w (a4,d6.w*4),d4
  7556. ; move.w 2(a4,d6.w*4),d5
  7557. ;
  7558. ; sub.w d2,d4    ;dx
  7559. ; sub.w d3,d5    ;dz
  7560. ; move.w xoff,d0
  7561. ; move.w zoff,d6
  7562. ; sub.w d2,d0
  7563. ; sub.w d3,d6
  7564. ; muls d0,d4
  7565. ; muls d6,d5
  7566. ; add.l d4,d5
  7567. ; ble.s .rightnotoktoclip
  7568.  
  7569. *************************************
  7570.  
  7571.  
  7572.  
  7573.  cmp.w rightclip,d1
  7574.  bge.s .rightnotoktoclip
  7575.  addq #1,d1
  7576.  move.w d1,rightclip
  7577. .rightnotoktoclip:
  7578.  addq #8,a6
  7579.  addq #2,a0
  7580.  rts
  7581.  
  7582. FIRSTsetlrclip:
  7583.  move.l #OnScreen,a1
  7584.  move.l #Rotated,a2
  7585.  
  7586.  move.w (a0)+,d0
  7587.  bge.s .notignoreleft
  7588.  bra .leftnotoktoclip
  7589. .notignoreleft:
  7590.  
  7591.  move.w 6(a2,d0*8),d3    ; left z val
  7592.  bgt.s .leftclipinfront
  7593.  
  7594.  move.w (a0),d0
  7595.  blt.s .ignoreboth
  7596.  tst.w 6(a2,d0*8)
  7597.  bgt.s .leftnotoktoclip
  7598. .ignoreboth
  7599.  move.w RIGHTX,rightclip
  7600.  move.w #0,leftclip
  7601.  addq #2,a0
  7602.  rts
  7603.  
  7604. .leftclipinfront:
  7605.  move.w (a1,d0*2),d1    ; left x on screen
  7606.  cmp.w leftclip,d1
  7607.  ble.s .leftnotoktoclip
  7608.  move.w d1,leftclip
  7609. .leftnotoktoclip:
  7610.  
  7611.  move.w (a0)+,d0
  7612.  bge.s .notignoreright
  7613.  move.w #0,d4
  7614.  bra .rightnotoktoclip
  7615. .notignoreright:
  7616.  move.w 6(a2,d0*8),d4    ; right z val
  7617.  ble.s .rightnotoktoclip
  7618.  
  7619. .rightclipinfront:
  7620.  move.w (a1,d0*2),d1    ; right x on screen
  7621.  addq #1,d1
  7622.  cmp.w rightclip,d1
  7623.  bge.s .rightnotoktoclip
  7624.  move.w d1,rightclip
  7625. .rightnotoktoclip:
  7626.  
  7627. ; move.w leftclip,d0
  7628. ; move.w rightclip,d1
  7629. ; cmp.w d0,d1
  7630. ; bge.s .noswap
  7631. ; move.w #192,rightclip
  7632. ; move.w #0,leftclip
  7633. ;.noswap:
  7634.  
  7635.  rts
  7636.  
  7637.  
  7638. leftclip2: dc.w 0
  7639. rightclip2: dc.w 0
  7640. ZoneBright: dc.w 0
  7641.  
  7642. npolys: dc.w 0
  7643.  
  7644. PLR1_fire: dc.b 0
  7645. PLR2_fire: dc.b 0
  7646.  
  7647. *****************************************************
  7648.  
  7649.  
  7650. pastdata:
  7651. ***********************************
  7652. * This routine animates brightnesses.
  7653.  
  7654.  
  7655. liftpt: dc.l liftanimtab
  7656.  
  7657. brightpt:
  7658.  dc.l brightanimtab
  7659.  
  7660.  
  7661. liftanim:
  7662.  rts
  7663.  
  7664. ******************************
  7665.  include "ab3:source_4000/ObjectMove"
  7666.  include "ab3:source_4000/newAnims"
  7667.  include "ab3:source_4000/airoutine.s"
  7668. ******************************
  7669. startpass:
  7670. ; include "ab3:source_4000/password_reloc.s"
  7671. endpass:
  7672.  
  7673. rotanimpt: dc.w 0
  7674. xradd: dc.w 5
  7675. yradd: dc.w 8
  7676. xrpos: dc.w 320
  7677. yrpos: dc.w 320
  7678.  
  7679. rotanim:
  7680.  rts
  7681.  
  7682. option:
  7683.  dc.l 0,0
  7684.  
  7685. ********** WALL STUFF *******************************
  7686.  
  7687.  include "AB3:source_4000/hireswall.s"
  7688.  include "AB3:source_4000/hiresgourwall.s"
  7689.  
  7690. *****************************************************
  7691.  
  7692. ******************************************
  7693. * floor polygon
  7694.  
  7695. numsidestd: dc.w 0
  7696. bottomline: dc.w 0
  7697.  
  7698. checkforwater:
  7699.  tst.b usewater
  7700.  beq.s .notwater
  7701.  
  7702.  move.l Roompt,a1
  7703.  move.w (a1),d7
  7704.  cmp.w currzone,d7
  7705.  bne.s .notwater
  7706.  
  7707.  move.b #$f,fillscrnwater
  7708.  
  7709. .notwater:
  7710.  move.w (a0)+,d6    ; sides-1
  7711.  add.w d6,d6
  7712.  add.w d6,a0
  7713.  add.w #4+6,a0
  7714.  rts
  7715.  
  7716.  rts
  7717.  
  7718. ;NewCornerBuff:
  7719. ; ds.l 100
  7720. CLRNOFLOOR: dc.w 0
  7721.  
  7722. itsafloordraw:
  7723.  
  7724. * If D0 =1 then its a floor otherwise (=2) it's
  7725. * a roof.
  7726.  
  7727.  move.w #0,above
  7728.  move.w (a0)+,d6    ; ypos of poly
  7729.  
  7730.  tst.b usewater
  7731.  beq.s .oknon
  7732.  tst.b DOANYWATER
  7733.  beq dontdrawreturn
  7734. .oknon
  7735.  
  7736.  move.w d6,d7
  7737.  ext.l d7
  7738.  asl.l #6,d7
  7739.  cmp.l TOPOFROOM,d7
  7740.  blt checkforwater
  7741.  cmp.l BOTOFROOM,d7
  7742.  bgt.s dontdrawreturn
  7743.  
  7744.  move.w leftclip,d7
  7745.  cmp.w rightclip,d7
  7746.  bge.s dontdrawreturn
  7747.  
  7748.  sub.w flooryoff,d6
  7749.  bgt.s below
  7750.  blt.s aboveplayer
  7751.  
  7752.  tst.b usewater
  7753.  beq.s .notwater
  7754.  
  7755.  move.l Roompt,a1
  7756.  move.w (a1),d7
  7757.  cmp.w currzone,d7
  7758.  
  7759.  bne.s .notwater
  7760.  
  7761.  st fillscrnwater
  7762.  
  7763. .notwater:
  7764.  
  7765.  
  7766. dontdrawreturn:
  7767.  move.w (a0)+,d6    ; sides-1
  7768.  add.w d6,d6
  7769.  add.w d6,a0
  7770.  add.w #4+6,a0
  7771.  rts
  7772. aboveplayer:
  7773.  
  7774.  tst.b usewater
  7775.  beq.s .notwater
  7776.  
  7777.  move.l Roompt,a1
  7778.  move.w (a1),d7
  7779.  cmp.w currzone,d7
  7780.  bne.s .notwater
  7781.  
  7782.  move.b #$f,fillscrnwater
  7783.  
  7784. .notwater:
  7785.  
  7786.  btst #1,d0
  7787.  beq.s dontdrawreturn
  7788.  move.w MIDDLEY,d7
  7789.  sub.w topclip,d7 
  7790.  ble.s dontdrawreturn
  7791.  move.w #1,d0
  7792.  move.w d0,above
  7793.  neg.w d6
  7794.  bra.s notbelow
  7795. below:
  7796.  move.w botclip,d7
  7797.  sub.w MIDDLEY,d7
  7798.  ble.s dontdrawreturn
  7799. notbelow:
  7800.  btst #0,d0
  7801.  beq.s dontdrawreturn
  7802.  move.w d6,distaddr
  7803.  muls #64,d6
  7804.  move.l d6,ypos
  7805.  ext.l d7
  7806.  divs.l d7,d6        ; zpos of bottom
  7807.             ; visible line
  7808.  
  7809.  beq dontdrawreturn
  7810.  
  7811.  cmp.l #32767,d6
  7812.  bgt dontdrawreturn
  7813.             
  7814.  move.w d6,minz
  7815.  move.w d7,bottomline
  7816.  
  7817. ; Go round each point finding out
  7818. ; if it should be visible or not.
  7819.  
  7820.  move.l a0,-(a7)
  7821.  
  7822.  move.w (a0)+,d7    ; number of sides
  7823.  move.l #Rotated,a1
  7824.  move.l #OnScreen,a2
  7825. ; move.l #NewCornerBuff,a3
  7826.  moveq #0,d4
  7827.  moveq #0,d5
  7828.  moveq #0,d6
  7829.  clr.b anyclipping
  7830.  
  7831. cornerprocessloop:
  7832.  
  7833.  move.w (a0)+,d0
  7834.  and.w #$fff,d0
  7835.  move.w 6(a1,d0.w*8),d1
  7836.  ble  .canttell
  7837.  
  7838.  move.w (a2,d0.w*2),d3
  7839.  cmp.w leftclip,d3
  7840.  bgt.s .nol
  7841.  st d4
  7842.  st anyclipping
  7843.  bra.s .nos
  7844. .nol:
  7845.  cmp.w rightclip,d3
  7846.  blt.s .nor
  7847.  st d6
  7848.  st anyclipping
  7849.  bra.s .nos
  7850. .nor:
  7851.  st d5
  7852. .nos:
  7853.  bra .cantell
  7854.  
  7855. .canttell:
  7856.  st d5
  7857.  st anyclipping
  7858.  
  7859. .cantell:
  7860.  
  7861.  
  7862.  dbra d7,cornerprocessloop
  7863.  
  7864.  
  7865.  move.l (a7)+,a0
  7866.  tst.b d5
  7867.  bne.s somefloortodraw
  7868.  eor.b d4,d6
  7869.  bne dontdrawreturn
  7870.  
  7871. somefloortodraw:
  7872.  
  7873.  tst.b gourfloor
  7874.  bne goursides
  7875.  
  7876.  move.w #300,top
  7877.  move.w #-1,bottom
  7878.  move.w #0,drawit
  7879.  move.l #Rotated,a1
  7880.  move.l #OnScreen,a2
  7881.  move.w (a0)+,d7    ; no of sides
  7882. sideloop:
  7883.  move.w minz,d6
  7884.  move.w (a0)+,d1
  7885.  move.w (a0),d3
  7886.  and.w #$fff,d1
  7887.  and.w #$fff,d3
  7888.  
  7889.  move.w 6(a1,d1*8),d4    ;first z
  7890.  cmp.w d6,d4
  7891.  bgt firstinfront
  7892.  move.w 6(a1,d3*8),d5    ; sec z
  7893.  cmp.w d6,d5
  7894.  ble bothbehind
  7895. ** line must be on left and partially behind.
  7896.  sub.w d5,d4
  7897.  move.l (a1,d1*8),d0
  7898.  sub.l (a1,d3*8),d0
  7899.  asr.l #7,d0
  7900.  sub.w d5,d6
  7901.  muls d6,d0    ; new x coord
  7902.  divs d4,d0
  7903.  ext.l d0
  7904.  asl.l #7,d0
  7905.  
  7906.  add.l (a1,d3*8),d0
  7907.  move.w minz,d4
  7908.  move.w (a2,d3*2),d2
  7909.  divs d4,d0
  7910.  add.w MIDDLEX,d0
  7911.  move.l ypos,d3
  7912.  divs d5,d3
  7913.  move.w bottomline,d1 
  7914.  bra lineclipped
  7915.  
  7916. firstinfront:
  7917.  move.w 6(a1,d3*8),d5    ; sec z
  7918.  cmp.w d6,d5
  7919.  bgt bothinfront
  7920. ** line must be on right and partially behind.
  7921.  sub.w d4,d5    ; dz
  7922.  move.l (a1,d3*8),d2
  7923.  sub.l (a1,d1*8),d2    ; dx
  7924.  sub.w d4,d6
  7925.  asr.l #7,d2
  7926.  muls d6,d2    ; new x coord
  7927.  divs d5,d2
  7928.  ext.l d2
  7929.  asl.l #7,d2
  7930.  add.l (a1,d1*8),d2
  7931.  move.w minz,d5
  7932.  move.w (a2,d1*2),d0
  7933.  divs d5,d2
  7934.  add.w MIDDLEX,d2
  7935.  move.l ypos,d1
  7936.  divs d4,d1
  7937.  move.w bottomline,d3 
  7938.  bra lineclipped
  7939.  
  7940. bothinfront:
  7941.  
  7942. * Also, usefully enough, both are on-screen
  7943. * so no bottom clipping is needed.
  7944.  
  7945.  move.w (a2,d1*2),d0    ; first x
  7946.  move.w (a2,d3*2),d2    ; second x
  7947.  move.l ypos,d1
  7948.  move.l d1,d3
  7949.  divs d4,d1        ; first y
  7950.  divs d5,d3        ; second y
  7951. lineclipped:
  7952.  move.l #rightsidetab,a3
  7953.  cmp.w d1,d3
  7954.  beq lineflat
  7955.  st drawit
  7956.  bgt lineonright
  7957.  move.l #leftsidetab,a3
  7958.  exg d1,d3
  7959.  exg d0,d2
  7960.  
  7961.  lea (a3,d1*2),a3
  7962.  
  7963.  cmp.w top(pc),d1
  7964.  bge.s .nonewtop
  7965.  move.w d1,top
  7966. .nonewtop:
  7967.  cmp.w bottom(pc),d3
  7968.  ble.s .nonewbot
  7969.  move.w d3,bottom
  7970. .nonewbot:
  7971.  
  7972.  sub.w d1,d3    ; dy
  7973.  sub.w d0,d2    ; dx
  7974.  
  7975.  blt .linegoingleft
  7976.  
  7977.  ext.l d2
  7978.  divs d3,d2
  7979.  move.w d2,d6
  7980.  swap d2
  7981.  
  7982. ; moveq #0,d6
  7983. ; sub.w d3,d2
  7984. ; blt.s .noco
  7985. ;.makeco
  7986. ; addq #1,d6
  7987. ; sub.w d3,d2
  7988. ; bge.s .makeco
  7989. ;.noco
  7990. ; add.w d3,d2
  7991.  
  7992.  move.w d3,d4
  7993.  move.w d3,d5
  7994.  subq #1,d5
  7995.  move.w d6,d1
  7996.  addq #1,d1
  7997.  
  7998. .pixlopright:
  7999.  move.w d0,(a3)+
  8000.  sub.w d2,d4
  8001.  bge.s .nobigstep
  8002.  add.w d1,d0
  8003.  add.w d3,d4
  8004.  dbra d5,.pixlopright
  8005.  bra lineflat
  8006. .nobigstep
  8007.  add.w d6,d0
  8008.  dbra d5,.pixlopright
  8009.  bra lineflat
  8010.  
  8011. .linegoingleft:
  8012.  
  8013.  neg.w d2
  8014.  
  8015.  ext.l d2
  8016.  divs d3,d2
  8017.  move.w d2,d6
  8018.  swap d2
  8019.  
  8020.  
  8021. ; moveq #0,d6
  8022. ; sub.w d3,d2
  8023. ; blt.s .nocol
  8024. ;.makecol
  8025. ; addq #1,d6
  8026. ; sub.w d3,d2
  8027. ; bge.s .makecol
  8028. ;.nocol
  8029. ; add.w d3,d2
  8030.  
  8031.  
  8032.  
  8033.  move.w d3,d4
  8034.  move.w d3,d5
  8035.  subq #1,d5
  8036.  
  8037.  move.w d6,d1
  8038.  addq #1,d1
  8039.  
  8040. .pixlopleft:
  8041.  sub.w d2,d4
  8042.  bge.s .nobigstepl
  8043.  sub.w d1,d0
  8044.  add.w d3,d4
  8045.  move.w d0,(a3)+
  8046.  dbra d5,.pixlopleft
  8047.  bra lineflat
  8048.  
  8049. .nobigstepl
  8050.  sub.w d6,d0
  8051.  move.w d0,(a3)+
  8052.  dbra d5,.pixlopleft
  8053.  bra lineflat
  8054.  
  8055. lineonright:
  8056.  
  8057.  lea (a3,d1*2),a3
  8058.  
  8059.  cmp.w top(pc),d1
  8060.  bge.s .nonewtop
  8061.  move.w d1,top
  8062. .nonewtop:
  8063.  cmp.w bottom(pc),d3
  8064.  ble.s .nonewbot
  8065.  move.w d3,bottom
  8066. .nonewbot:
  8067.  
  8068.  sub.w d1,d3    ; dy
  8069.  sub.w d0,d2    ; dx
  8070.  blt .linegoingleft
  8071. ; addq #1,d0
  8072.  ext.l d2
  8073.  divs d3,d2
  8074.  move.w d2,d6
  8075.  swap d2
  8076.  
  8077. ; moveq #0,d6
  8078. ; sub.w d3,d2
  8079. ; blt.s .noco
  8080. ;.makeco
  8081. ; addq #1,d6
  8082. ; sub.w d3,d2
  8083. ; bge.s .makeco
  8084. ;.noco
  8085. ; add.w d3,d2
  8086.  
  8087.  move.w d3,d4
  8088.  move.w d3,d5
  8089.  subq #1,d5
  8090.  move.w d6,d1
  8091.  addq #1,d1
  8092.  
  8093. .pixlopright:
  8094.  sub.w d2,d4
  8095.  bge.s .nobigstep
  8096.  add.w d1,d0
  8097.  add.w d3,d4
  8098.  move.w d0,(a3)+
  8099.  dbra d5,.pixlopright
  8100.  bra lineflat
  8101.  
  8102. .nobigstep
  8103.  add.w d6,d0
  8104.  move.w d0,(a3)+
  8105.  dbra d5,.pixlopright
  8106.  bra lineflat
  8107.  
  8108. .linegoingleft:
  8109. ; addq #1,d0
  8110.  neg.w d2
  8111.  
  8112.  ext.l d2
  8113.  divs d3,d2
  8114.  move.w d2,d6
  8115.  swap d2
  8116.  
  8117.  
  8118. ; moveq #0,d6
  8119. ; sub.w d3,d2
  8120. ; blt.s .nocol
  8121. ;.makecol
  8122. ; addq #1,d6
  8123. ; sub.w d3,d2
  8124. ; bge.s .makecol
  8125. ;.nocol
  8126. ; add.w d3,d2
  8127.  
  8128.  move.w d3,d4
  8129.  move.w d3,d5
  8130.  subq #1,d5
  8131.  move.w d6,d1
  8132.  addq #1,d1
  8133.  
  8134. .pixlopleft:
  8135.  move.w d0,(a3)+
  8136.  sub.w d2,d4
  8137.  bge.s .nobigstepl
  8138.  sub.w d1,d0
  8139.  add.w d3,d4
  8140.  dbra d5,.pixlopleft
  8141.  bra lineflat
  8142.  
  8143. .nobigstepl
  8144.  sub.w d6,d0
  8145.  dbra d5,.pixlopleft
  8146.  
  8147. lineflat:
  8148.  
  8149. bothbehind:
  8150.  dbra d7,sideloop
  8151.  bra pastsides
  8152.  
  8153. fbr: dc.w 0
  8154. sbr: dc.w 0
  8155. FloorPtBrights: dc.l 0
  8156.  
  8157. goursides:
  8158.  
  8159.  move.w #300,top
  8160.  move.w #-1,bottom
  8161.  move.w #0,drawit
  8162.  move.l #Rotated,a1
  8163.  move.l #OnScreen,a2
  8164.  move.w (a0)+,d7    ; no of sides
  8165. sideloopGOUR:
  8166.  move.w minz,d6
  8167.  move.w (a0)+,d1
  8168.  move.w (a0),d3
  8169.  
  8170.  move.w d1,d4
  8171.  move.w d3,d5
  8172.  and.w #$0fff,d1
  8173.  and.w #$0fff,d3
  8174.  
  8175.  rol.w #4,d4
  8176.  rol.w #4,d5
  8177.  and.w #$f,d4
  8178.  and.w #$f,d5
  8179.  
  8180.  move.l FloorPtBrights,a4
  8181.  move.w (a4,d4.w*8),d4
  8182.  bge.s .okpos1
  8183.  neg.w d4
  8184. .okpos1:
  8185.  sub.w #300,d4
  8186.  move.w d4,fbr
  8187.  move.w (a4,d5.w*8),d4
  8188.  bge.s .okpos2
  8189.  neg.w d4
  8190. .okpos2:
  8191.  sub.w #300,d4
  8192.  move.w d4,sbr
  8193.  
  8194.  move.w 6(a1,d1*8),d4    ;first z
  8195.  cmp.w d6,d4
  8196.  bgt firstinfrontGOUR
  8197.  move.w 6(a1,d3*8),d5    ; sec z
  8198.  cmp.w d6,d5
  8199.  ble bothbehindGOUR
  8200. ** line must be on left and partially behind.
  8201.  sub.w d5,d4
  8202.  
  8203.  move.w fbr,d0
  8204.  sub.w sbr,d0
  8205.  sub.w d5,d6
  8206.  muls d6,d0
  8207.  divs d4,d0
  8208.  add.w sbr,d0
  8209.  move.w d0,fbr
  8210.  
  8211.  move.l (a1,d1*8),d0
  8212.  sub.l (a1,d3*8),d0
  8213.  asr.l #7,d0
  8214.  muls d6,d0    ; new x coord
  8215.  divs d4,d0
  8216.  ext.l d0
  8217.  asl.l #7,d0
  8218.  
  8219.  add.l (a1,d3*8),d0
  8220.  move.w minz,d4
  8221.  move.w (a2,d3*2),d2
  8222.  divs d4,d0
  8223.  add.w MIDDLEX,d0
  8224.  move.l ypos,d3
  8225.  divs d5,d3
  8226.  
  8227.  move.w bottomline,d1 
  8228.  bra lineclippedGOUR
  8229.  
  8230. firstinfrontGOUR:
  8231.  move.w 6(a1,d3*8),d5    ; sec z
  8232.  cmp.w d6,d5
  8233.  bgt bothinfrontGOUR
  8234. ** line must be on right and partially behind.
  8235.  sub.w d4,d5    ; dz
  8236.  
  8237.  move.w sbr,d2
  8238.  sub.w fbr,d2
  8239.  sub.w d4,d6
  8240.  muls d6,d2
  8241.  divs d5,d2
  8242.  add.w fbr,d2
  8243.  move.w d2,sbr
  8244.  
  8245.  move.l (a1,d3*8),d2
  8246.  sub.l (a1,d1*8),d2    ; dx
  8247.  asr.l #7,d2
  8248.  muls d6,d2    ; new x coord
  8249.  divs d5,d2
  8250.  ext.l d2
  8251.  asl.l #7,d2
  8252.  add.l (a1,d1*8),d2
  8253.  move.w minz,d5
  8254.  move.w (a2,d1*2),d0
  8255.  divs d5,d2
  8256.  add.w MIDDLEX,d2
  8257.  move.l ypos,d1
  8258.  divs d4,d1
  8259.  move.w bottomline,d3 
  8260.  bra lineclippedGOUR
  8261.  
  8262. bothinfrontGOUR:
  8263.  
  8264. * Also, usefully enough, both are on-screen
  8265. * so no bottom clipping is needed.
  8266.  
  8267.  move.w (a2,d1*2),d0    ; first x
  8268.  move.w (a2,d3*2),d2    ; second x
  8269.  move.l ypos,d1
  8270.  move.l d1,d3
  8271.  divs d4,d1        ; first y
  8272.  divs d5,d3        ; second y
  8273. lineclippedGOUR:
  8274.  move.l #rightsidetab,a3
  8275.  cmp.w d1,d3
  8276.  bne linenotflatGOUR
  8277.  
  8278. ; move.w fbr,d4
  8279. ; move.w sbr,d5
  8280. ; cmp.w d0,d2
  8281. ; bgt.s .nsw
  8282. ; exg d4,d5
  8283. ;.nsw:
  8284.  
  8285. ; move.l #leftbrighttab,a3
  8286. ; move.w d4,(a3,d3.w)
  8287. ; move.l #rightbrighttab,a3
  8288. ; move.w d5,(a3,d3.w) 
  8289.  bra lineflatGOUR
  8290.  
  8291. linenotflatGOUR
  8292.  st drawit
  8293.  bgt lineonrightGOUR
  8294.  move.l #leftsidetab,a3
  8295.  exg d1,d3
  8296.  exg d0,d2
  8297.  
  8298.  lea (a3,d1*2),a3
  8299.  lea leftbrighttab-leftsidetab(a3),a4
  8300.  
  8301.  cmp.w top(pc),d1
  8302.  bge.s .nonewtop
  8303.  move.w d1,top
  8304. .nonewtop:
  8305.  cmp.w bottom(pc),d3
  8306.  ble.s .nonewbot
  8307.  move.w d3,bottom
  8308. .nonewbot:
  8309.  
  8310.  sub.w d1,d3    ; dy
  8311.  sub.w d0,d2    ; dx
  8312.  
  8313.  blt .linegoingleft
  8314.  
  8315.  ext.l d2
  8316.  divs d3,d2
  8317.  move.w d2,d6
  8318.  swap d2
  8319.  move.w d2,a5
  8320.  
  8321. ; moveq #0,d6
  8322. ; sub.w d3,d2
  8323. ; blt.s .noco
  8324. ;.makeco
  8325. ; addq #1,d6
  8326. ; sub.w d3,d2
  8327. ; bge.s .makeco
  8328. ;.noco
  8329. ; add.w d3,d2
  8330.  
  8331.  move.w d3,d4
  8332.  move.w d3,d5
  8333.  subq #1,d5
  8334.  move.w d6,d1
  8335.  addq #1,d1
  8336.  move.w d1,a6
  8337.  
  8338.  moveq #0,d1
  8339.  move.w sbr,d1
  8340.  move.w fbr,d2
  8341.  sub.w d1,d2
  8342.  ext.l d2
  8343.  asl.w #8,d2
  8344.  asl.w #2,d2
  8345.  divs d3,d2 
  8346.  ext.l d2
  8347.  asl.l #6,d2
  8348.  swap d1
  8349.  
  8350. .pixlopright:
  8351.  move.w d0,(a3)+
  8352.  swap d1
  8353.  move.w d1,(a4)+
  8354.  swap d1
  8355.  add.l d2,d1
  8356.  
  8357.  sub.w a5,d4
  8358.  bge.s .nobigstep
  8359.  add.w a6,d0
  8360.  add.w d3,d4
  8361.  dbra d5,.pixlopright
  8362.  bra lineflatGOUR
  8363. .nobigstep
  8364.  
  8365.  add.w d6,d0
  8366.  dbra d5,.pixlopright
  8367.  bra lineflatGOUR
  8368.  
  8369. .linegoingleft:
  8370.  
  8371.  neg.w d2
  8372.  
  8373.  ext.l d2
  8374.  divs d3,d2
  8375.  move.w d2,d6
  8376.  swap d2
  8377.  
  8378.  
  8379. ; moveq #0,d6
  8380. ; sub.w d3,d2
  8381. ; blt.s .nocol
  8382. ;.makecol
  8383. ; addq #1,d6
  8384. ; sub.w d3,d2
  8385. ; bge.s .makecol
  8386. ;.nocol
  8387. ; add.w d3,d2
  8388.  
  8389.  move.w d3,d4
  8390.  move.w d3,d5
  8391.  subq #1,d5
  8392.  
  8393.  move.w d6,d1
  8394.  addq #1,d1
  8395.  move.w d1,a6
  8396.  move.w d2,a5
  8397.  
  8398.  moveq #0,d1
  8399.  move.w sbr,d1
  8400.  move.w fbr,d2
  8401.  sub.w d1,d2
  8402.  ext.l d2
  8403.  asl.w #8,d2
  8404.  asl.w #2,d2
  8405.  divs d3,d2 
  8406.  ext.l d2
  8407.  asl.l #6,d2
  8408.  swap d1
  8409.  
  8410. .pixlopleft:
  8411.  
  8412.  swap d1
  8413.  move.w d1,(a4)+
  8414.  swap d1
  8415.  add.l d2,d1
  8416.  
  8417.  sub.w a5,d4
  8418.  bge.s .nobigstepl
  8419.  sub.w a6,d0
  8420.  add.w d3,d4
  8421.  move.w d0,(a3)+
  8422.  dbra d5,.pixlopleft
  8423.  bra lineflatGOUR
  8424.  
  8425. .nobigstepl
  8426.  sub.w d6,d0
  8427.  move.w d0,(a3)+
  8428.  dbra d5,.pixlopleft
  8429.  bra lineflatGOUR
  8430.  
  8431. lineonrightGOUR:
  8432.  
  8433.  lea (a3,d1*2),a3
  8434.  
  8435.  lea rightbrighttab-rightsidetab(a3),a4
  8436.  
  8437.  cmp.w top(pc),d1
  8438.  bge.s .nonewtop
  8439.  move.w d1,top
  8440. .nonewtop:
  8441.  cmp.w bottom(pc),d3
  8442.  ble.s .nonewbot
  8443.  move.w d3,bottom
  8444. .nonewbot:
  8445.  
  8446.  sub.w d1,d3    ; dy
  8447.  sub.w d0,d2    ; dx
  8448.  blt .linegoingleft
  8449. ; addq #1,d0
  8450.  ext.l d2
  8451.  divs d3,d2
  8452.  move.w d2,d6
  8453.  swap d2
  8454.  
  8455. ; moveq #0,d6
  8456. ; sub.w d3,d2
  8457. ; blt.s .noco
  8458. ;.makeco
  8459. ; addq #1,d6
  8460. ; sub.w d3,d2
  8461. ; bge.s .makeco
  8462. ;.noco
  8463. ; add.w d3,d2
  8464.  
  8465.  move.w d3,d4
  8466.  move.w d3,d5
  8467.  subq #1,d5
  8468.  move.w d6,d1
  8469.  addq #1,d1
  8470.  
  8471.  move.w d1,a6
  8472.  move.w d2,a5
  8473.  
  8474.  moveq #0,d1
  8475.  move.w fbr,d1
  8476.  move.w sbr,d2
  8477.  sub.w d1,d2
  8478.  ext.l d2
  8479.  asl.w #8,d2
  8480.  asl.w #2,d2
  8481.  divs d3,d2 
  8482.  ext.l d2
  8483.  asl.l #6,d2
  8484.  swap d1
  8485.  
  8486. .pixlopright:
  8487.  
  8488.  swap d1
  8489.  move.w d1,(a4)+
  8490.  swap d1
  8491.  add.l d2,d1
  8492.  
  8493.  sub.w a5,d4
  8494.  bge.s .nobigstep
  8495.  add.w a6,d0
  8496.  add.w d3,d4
  8497.  move.w d0,(a3)+
  8498.  dbra d5,.pixlopright
  8499.  bra lineflatGOUR
  8500.  
  8501. .nobigstep
  8502.  add.w d6,d0
  8503.  move.w d0,(a3)+
  8504.  dbra d5,.pixlopright
  8505.  bra lineflatGOUR
  8506.  
  8507. .linegoingleft:
  8508. ; addq #1,d0
  8509.  neg.w d2
  8510.  
  8511.  ext.l d2
  8512.  divs d3,d2
  8513.  move.w d2,d6
  8514.  swap d2
  8515.  
  8516.  
  8517. ; moveq #0,d6
  8518. ; sub.w d3,d2
  8519. ; blt.s .nocol
  8520. ;.makecol
  8521. ; addq #1,d6
  8522. ; sub.w d3,d2
  8523. ; bge.s .makecol
  8524. ;.nocol
  8525. ; add.w d3,d2
  8526.  
  8527.  move.w d3,d4
  8528.  move.w d3,d5
  8529.  subq #1,d5
  8530.  move.w d6,d1
  8531.  addq #1,d1
  8532.  move.w d1,a6
  8533.  move.w d2,a5
  8534.  
  8535.  moveq #0,d1
  8536.  move.w fbr,d1
  8537.  move.w sbr,d2
  8538.  sub.w d1,d2
  8539.  ext.l d2
  8540.  asl.w #8,d2
  8541.  asl.w #2,d2
  8542.  divs d3,d2 
  8543.  ext.l d2
  8544.  asl.l #6,d2
  8545.  swap d1
  8546.  
  8547. .pixlopleft:
  8548.  
  8549.  swap d1
  8550.  move.w d1,(a4)+
  8551.  swap d1
  8552.  add.l d2,d1
  8553.  
  8554.  move.w d0,(a3)+
  8555.  sub.w a5,d4
  8556.  bge.s .nobigstepl
  8557.  sub.w a6,d0
  8558.  add.w d3,d4
  8559.  dbra d5,.pixlopleft
  8560.  bra lineflatGOUR
  8561.  
  8562. .nobigstepl
  8563.  sub.w d6,d0
  8564.  dbra d5,.pixlopleft
  8565.  
  8566. lineflatGOUR:
  8567.  
  8568. bothbehindGOUR:
  8569.  dbra d7,sideloopGOUR
  8570.  
  8571. pastsides:
  8572.  
  8573.  addq #2,a0
  8574.  
  8575.  move.w #320,linedir
  8576.  
  8577. ; move.l FASTBUFFER2,a6
  8578. ; add.l BIGMIDDLEY,a6
  8579. ; move.l a6,REFPTR
  8580.  
  8581.  move.l FASTBUFFER,a6
  8582.  add.l BIGMIDDLEY,a6
  8583.  move.w (a0)+,d6
  8584.  add.w SMALLIT,d6
  8585.  move.w d6,scaleval
  8586.  move.w (a0)+,d6
  8587.  
  8588.  ifne CHEESEY
  8589.  move.w d6,d7    ; 000000XX000000YY
  8590.  lsr.w #6,d6
  8591.  add.w d6,d7    ; 000000XX0000XXYY
  8592.  
  8593.  and.b #%111,d6    ; 000000XX00000XYY
  8594.  add.b d7,d7    ; 000000XX0000XYY0
  8595.  asl.w #4,d7    ; 00XX0000 XYY00000
  8596.  and.w #%0010000011100000,d7
  8597.  move.w d7,d6
  8598.  endc
  8599.  
  8600.  move.w d6,whichtile
  8601.  move.w (a0)+,d6
  8602.  add.w ZoneBright,d6
  8603.  move.w d6,lighttype
  8604.  move.w above(pc),d6
  8605.  beq groundfloor
  8606. * on ceiling:
  8607.  move.w #-320,linedir
  8608.  suba.w #320,a6
  8609. groundfloor:
  8610.  
  8611.  move.w xoff,d6
  8612.  move.w zoff,d7
  8613.  add.w xwobxoff,d7
  8614.  add.w xwobzoff,d6
  8615.  ext.l d6
  8616.  ext.l d7
  8617.  
  8618.  tst.b FULLSCR
  8619.  beq.s .shiftit
  8620.  
  8621.  asl.l #2,d6
  8622.  asl.l #2,d7
  8623.  divs #3,d6
  8624.  divs #3,d7
  8625.  swap d6
  8626.  swap d7
  8627.  clr.w d6
  8628.  clr.w d7
  8629.  asr.l #2,d6
  8630.  asr.l #2,d7
  8631.  bra.s .donsht
  8632.  
  8633. .shiftit
  8634.  
  8635. ; divs #3,d6
  8636. ; divs #3,d7
  8637.  swap d6
  8638.  swap d7
  8639.  clr.w d6
  8640.  clr.w d7
  8641.  asr.l #1,d6
  8642.  asr.l #1,d7
  8643. .donsht:
  8644.  move.w scaleval(pc),d3
  8645.  beq.s .samescale
  8646.  bgt.s .scaledown
  8647.  neg.w d3
  8648.  asr.l d3,d7
  8649.  asr.l d3,d6
  8650.  bra.s .samescale
  8651. .scaledown:
  8652.  asl.l d3,d6
  8653.  asl.l d3,d7
  8654. .samescale
  8655.  
  8656.  ifne CHEESEY
  8657.  asr.l #1,d6
  8658.  asr.l #1,d7
  8659.  endc
  8660.  
  8661.  move.l d6,sxoff
  8662.  move.l d7,szoff
  8663.  bra pastscale 
  8664.  
  8665.  asr.l #3,d1
  8666.  asr.l #3,d2
  8667.  asr.l #2,d1
  8668.  asr.l #2,d2
  8669.  asr.l #1,d1
  8670.  asr.l #1,d2
  8671. scaleprogfrom
  8672.  nop
  8673.  nop
  8674.  asl.l #1,d1
  8675.  asl.l #1,d2
  8676.  asl.l #2,d1
  8677.  asl.l #2,d2
  8678.  asl.l #3,d1
  8679.  asl.l #3,d2
  8680.  
  8681. top: dc.w 0
  8682. bottom: dc.w 0
  8683. ypos: dc.l 0
  8684. nfloors: dc.w 0
  8685. lighttype: dc.w 0
  8686. above: dc.w 0 
  8687. linedir: dc.w 0
  8688. distaddr: dc.w 0
  8689.  
  8690. minz: dc.l 0
  8691.  
  8692. leftsidetab:
  8693.  ds.w 512*2
  8694. rightsidetab:
  8695.  ds.w 512*2
  8696. leftbrighttab:
  8697.  ds.w 512*2
  8698. rightbrighttab:
  8699.  ds.w 512*2
  8700.  
  8701. PointBrights:
  8702.  dc.l 0
  8703. CurrentPointBrights:
  8704.  ds.l 2*256*10
  8705.  
  8706. movespd: dc.w 0
  8707. largespd: dc.l 0
  8708. disttobot: dc.w 0
  8709.  
  8710. pastscale:
  8711.  
  8712.  
  8713.  tst.b drawit(pc)
  8714.  beq dontdrawfloor
  8715.  
  8716.  tst.b DOUBLEHEIGHT
  8717.  beq pix1h
  8718.  
  8719.  move.l a0,-(a7)
  8720.  move.w linedir,d1
  8721.  add.w d1,linedir
  8722.  
  8723.  move.l #leftsidetab,a4
  8724.  move.w top(pc),d1
  8725.  tst.w above
  8726.  beq.s .clipfloor
  8727.  
  8728.  sub.w #320,a6
  8729.  
  8730.  move.w MIDDLEY,d7
  8731.  subq #1,d7
  8732.  sub.w d1,d7
  8733.  move.w d7,disttobot
  8734.  
  8735.  move.w bottom(pc),d7
  8736.  move.w MIDDLEY,d3
  8737.  move.w d3,d4
  8738.  sub.w topclip,d3
  8739.  sub.w botclip,d4
  8740.  cmp.w d3,d1
  8741.  bge predontdrawfloor
  8742.  cmp.w d4,d7
  8743.  blt predontdrawfloor
  8744.  cmp.w d4,d1
  8745.  bge.s .nocliptoproof
  8746.  move.w d4,d1
  8747. .nocliptoproof
  8748.  cmp.w d3,d7
  8749.  blt .doneclip
  8750.  move.w d3,d7
  8751.  bra .doneclip
  8752.  
  8753. .clipfloor:
  8754.  move.w BOTTOMY,d7
  8755.  sub.w MIDDLEY,d7
  8756.  subq #1,d7
  8757.  sub.w d1,d7
  8758.  move.w d7,disttobot
  8759.  
  8760.  move.w bottom(pc),d7
  8761.  move.w botclip,d4
  8762.  sub.w MIDDLEY,d4
  8763.  cmp.w d4,d1
  8764.  bge predontdrawfloor
  8765.  move.w topclip,d3
  8766.  sub.w MIDDLEY,d3
  8767.  cmp.w d3,d1
  8768.  bge.s .nocliptopfloor
  8769.  move.w d3,d1
  8770. .nocliptopfloor 
  8771.  cmp.w d3,d7
  8772.  ble predontdrawfloor
  8773.  cmp.w d4,d7
  8774.  blt.s .noclipbotfloor
  8775.  move.w d4,d7
  8776. .noclipbotfloor:
  8777.  
  8778. .doneclip:
  8779.  
  8780.  lea (a4,d1*2),a4
  8781.  addq #1,d7
  8782.  sub.w d1,d7
  8783.  
  8784. ;moveq #0,d0
  8785.  asr.w #1,d1
  8786. ; addx d0,d1
  8787.  
  8788. ; move.l #dists,a2
  8789.  move.w distaddr,d0
  8790.  muls #64,d0
  8791.  move.l d0,a2
  8792. ; muls #25,d0
  8793. ; adda.w d0,a2
  8794. ; lea (a2,d1*2),a2
  8795.  asr.w #1,d7
  8796.  ble predontdrawfloor 
  8797.  move.w d1,d0
  8798.  bne.s .notzero
  8799.  moveq #1,d0
  8800. .notzero
  8801.  add.w d0,d0
  8802.  muls linedir,d1
  8803.  add.l d1,a6
  8804. ; sub.l d1,REFPTR
  8805.  move.l TexturePal,a1
  8806.  add.l #256*32,a1
  8807.  move.l LineToUse,a5
  8808.  
  8809.  move.w #4,tonextline
  8810.  
  8811.  bra pix2h
  8812.  
  8813. pix1h:
  8814.  
  8815.  move.l a0,-(a7)
  8816.  
  8817.  move.l #leftsidetab,a4
  8818.  move.w top(pc),d1
  8819.   
  8820.  tst.w above
  8821.  beq.s clipfloor
  8822.  
  8823.  move.w MIDDLEY,d7
  8824.  subq #1,d7
  8825.  sub.w d1,d7
  8826.  move.w d7,disttobot
  8827.  
  8828.  move.w bottom(pc),d7
  8829.  move.w MIDDLEY,d3
  8830.  move.w d3,d4
  8831.  sub.w topclip,d3
  8832.  sub.w botclip,d4
  8833.  cmp.w d3,d1
  8834.  bge predontdrawfloor
  8835.  cmp.w d4,d7
  8836.  blt predontdrawfloor
  8837.  cmp.w d4,d1
  8838.  bge.s .nocliptoproof
  8839.  move.w d4,d1
  8840. .nocliptoproof
  8841.  cmp.w d3,d7
  8842.  blt doneclip
  8843.  move.w d3,d7
  8844.  bra doneclip
  8845.  
  8846. clipfloor:
  8847.  move.w BOTTOMY,d7
  8848.  sub.w MIDDLEY,d7
  8849.  subq #1,d7
  8850.  sub.w d1,d7
  8851.  move.w d7,disttobot
  8852.  
  8853.  move.w bottom(pc),d7
  8854.  move.w botclip,d4
  8855.  sub.w MIDDLEY,d4
  8856.  cmp.w d4,d1
  8857.  bge predontdrawfloor
  8858.  move.w topclip,d3
  8859.  sub.w MIDDLEY,d3
  8860.  cmp.w d3,d1
  8861.  bge.s .nocliptopfloor
  8862.  move.w d3,d1
  8863. .nocliptopfloor 
  8864.  cmp.w d3,d7
  8865.  ble predontdrawfloor
  8866.  cmp.w d4,d7
  8867.  blt.s .noclipbotfloor
  8868.  move.w d4,d7
  8869. .noclipbotfloor:
  8870.  
  8871. doneclip:
  8872.  
  8873.  lea (a4,d1*2),a4
  8874. ; move.l #dists,a2
  8875.  move.w distaddr,d0
  8876.  muls #64,d0
  8877.  move.l d0,a2
  8878. ; muls #25,d0
  8879. ; adda.w d0,a2
  8880. ; lea (a2,d1*2),a2
  8881.  sub.w d1,d7
  8882.  ble predontdrawfloor 
  8883.  move.w d1,d0
  8884.  bne.s .notzero
  8885.  moveq #1,d0
  8886. .notzero
  8887.  muls linedir,d1
  8888.  add.l d1,a6
  8889. ; sub.l d1,REFPTR
  8890.  move.l TexturePal,a1
  8891.  add.l #256*32,a1
  8892.  move.l LineToUse,a5
  8893.  
  8894.  move.w #2,tonextline
  8895.  
  8896. pix2h:
  8897.  
  8898.  tst.b gourfloor
  8899.  bne dogourfloor
  8900.  
  8901.  tst.b anyclipping
  8902.  beq dofloornoclip
  8903.  
  8904. dofloor:
  8905. ; move.w (a2)+,d0
  8906.  move.w leftclip,d3
  8907.  move.w rightclip,d4
  8908.  move.w rightsidetab-leftsidetab(a4),d2
  8909.  
  8910.  addq #1,d2
  8911.  cmp.w d3,d2
  8912.  ble.s nodrawline
  8913.  cmp.w d4,d2
  8914.  ble.s noclipright
  8915.  move.w d4,d2
  8916. noclipright:
  8917.  move.w (a4),d1
  8918.  cmp.w d4,d1
  8919.  bge.s nodrawline
  8920.  cmp.w d3,d1
  8921.  bge.s noclipleft
  8922.  move.w d3,d1
  8923. noclipleft:
  8924.  cmp.w d1,d2
  8925.  ble.s nodrawline
  8926.  
  8927.  move.w d1,leftedge
  8928.  move.w d2,rightedge
  8929.  
  8930. ; moveq #0,d1
  8931. ; moveq #0,d3
  8932. ; move.w leftbrighttab-leftsidetab(a4),d1
  8933. ; bge.s .okbl
  8934. ; moveq #0,d1
  8935. ;.okbl:
  8936.  
  8937. ; move.w rightbrighttab-leftsidetab(a4),d3
  8938. ; bge.s .okbr
  8939. ; moveq #0,d3
  8940. ;.okbr:
  8941.  
  8942. ; sub.w d1,d3
  8943. ; asl.w #8,d1
  8944. ; move.l d1,leftbright
  8945. ; swap d3
  8946. ; asr.l #5,d3
  8947. ; divs d5,d3
  8948. ; move.w d3,d5
  8949. ; muls.w d6,d5
  8950. ; asr.l #3,d5
  8951. ; clr.b d5
  8952. ; add.w d5,leftbright+2
  8953.  
  8954. ; ext.l d3
  8955. ; asl.l #5,d3
  8956. ; swap d3
  8957. ; asl.w #8,d3
  8958. ; move.l d3,brightspd
  8959.  
  8960.  move.l a6,a3
  8961.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8962.  move.l a2,d7
  8963.  asl.l #2,d7
  8964.  ext.l d0
  8965.  divs.l d0,d7
  8966.  move.l d7,d0
  8967.  jsr (a5)
  8968.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8969. nodrawline
  8970.  sub.w #1,disttobot
  8971.  move.w linedir(pc),d3
  8972.  adda.w d3,a6
  8973. ; ext.l d3
  8974. ; sub.l d3,REFPTR
  8975.  move.w tonextline,d3
  8976.  add.w d3,a4
  8977.  asr.w #1,d3
  8978.  add.w d3,d0
  8979.  subq #1,d7
  8980.  bgt dofloor
  8981.  
  8982. predontdrawfloor
  8983.  move.l (a7)+,a0
  8984.  
  8985. dontdrawfloor:
  8986.  
  8987.  rts
  8988.  
  8989. tonextline: dc.w 0
  8990. anyclipping: dc.w 0
  8991.  
  8992. dofloornoclip:
  8993. ; move.w (a2)+,d0
  8994.  move.w rightsidetab-leftsidetab(a4),d2
  8995.  addq #1,d2
  8996.  move.w (a4),d1
  8997.  move.w d1,leftedge
  8998.  move.w d2,rightedge
  8999.  
  9000. ; sub.w d1,d2
  9001.  
  9002. ; moveq #0,d1
  9003. ; moveq #0,d3
  9004. ; move.w leftbrighttab-leftsidetab(a4),d1
  9005. ; bge.s .okbl
  9006. ; moveq #0,d1
  9007. ;.okbl:
  9008.  
  9009. ; move.w rightbrighttab-leftsidetab(a4),d3
  9010. ; bge.s .okbr
  9011. ; moveq #0,d3
  9012. ;.okbr:
  9013.  
  9014. ; sub.w d1,d3
  9015. ; asl.w #8,d1
  9016. ; move.l d1,leftbright
  9017. ; swap d3
  9018. ; asr.l #5,d3
  9019. ; divs d2,d3
  9020. ; ext.l d3
  9021. ; asl.l #5,d3
  9022. ; swap d3
  9023. ; asl.w #8,d3
  9024. ; move.l d3,brightspd
  9025.  
  9026.  move.l a6,a3
  9027.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9028.  move.l a2,d7
  9029.  asl.l #2,d7
  9030.  ext.l d0
  9031.  divs.l d0,d7
  9032.  move.l d7,d0
  9033.  jsr (a5)
  9034.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9035.  sub.w #1,disttobot
  9036.  move.w linedir(pc),d3
  9037.  adda.w d3,a6
  9038. ; ext.l d3
  9039. ; sub.l d3,REFPTR
  9040.  move.w tonextline,d3
  9041.  add.w d3,a4
  9042.  asr.w #1,d3
  9043.  add.w d3,d0
  9044.  subq #1,d7
  9045.  bgt dofloornoclip
  9046.  
  9047.  bra predontdrawfloor
  9048.  
  9049. dogourfloor:
  9050.  tst.b anyclipping
  9051.  beq dofloornoclipGOUR
  9052.  
  9053. dofloorGOUR:
  9054. ; move.w (a2)+,d0
  9055.  move.w leftclip,d3
  9056.  move.w rightclip,d4
  9057.  move.w rightsidetab-leftsidetab(a4),d2
  9058.  
  9059.  move.w d2,d5
  9060.  sub.w (a4),d5
  9061.  addq #1,d5
  9062.  moveq #0,d6
  9063.  
  9064.  addq #1,d2
  9065.  cmp.w d3,d2
  9066.  ble nodrawlineGOUR
  9067.  cmp.w d4,d2
  9068.  ble.s nocliprightGOUR
  9069.  move.w d4,d2
  9070. nocliprightGOUR:
  9071.  move.w (a4),d1
  9072.  cmp.w d4,d1
  9073.  bge nodrawlineGOUR
  9074.  cmp.w d3,d1
  9075.  bge.s noclipleftGOUR
  9076.  move.w d3,d6
  9077.  subq #1,d6
  9078.  sub.w d1,d6
  9079.  move.w d3,d1
  9080. noclipleftGOUR:
  9081.  cmp.w d1,d2
  9082.  ble nodrawlineGOUR
  9083.  
  9084.  move.w d1,leftedge
  9085.  move.w d2,rightedge
  9086.  
  9087.  move.l a2,d2
  9088.  asl.l #2,d2
  9089.  ext.l d0
  9090.  divs.l d0,d2
  9091.  move.l d2,dst
  9092.  asr.l #7,d2
  9093.  asr.l #2,d2
  9094. ; addq #5,d2
  9095. ; add.w lighttype,d2
  9096.  
  9097.  moveq #0,d1
  9098.  moveq #0,d3
  9099.  move.w leftbrighttab-leftsidetab(a4),d1
  9100.  add.w d2,d1
  9101.  bge.s .okbl
  9102.  moveq #0,d1
  9103. .okbl:
  9104. ; asr.w #1,d1
  9105.  cmp.w #30,d1
  9106.  ble.s .okdl
  9107.  move.w #30,d1
  9108. .okdl:
  9109.  
  9110.  move.w rightbrighttab-leftsidetab(a4),d3
  9111.  add.w d2,d3
  9112.  bge.s .okbr
  9113.  moveq #0,d3
  9114. .okbr:
  9115. ; asr.w #1,d3
  9116.  cmp.w #30,d3
  9117.  ble.s .okdr
  9118.  move.w #30,d3
  9119. .okdr:
  9120.  
  9121.  sub.w d1,d3
  9122.  asl.w #8,d1
  9123.  move.w d1,leftbright
  9124.  swap d3
  9125.  tst.l d3
  9126.  bgt.s .OKITSPOSALREADY 
  9127.  neg.l d3
  9128.  asr.l #6,d3
  9129.  divs d5,d3
  9130.  neg.w d3
  9131.  bra.s .OKNOWITSNEG
  9132.  
  9133. .OKITSPOSALREADY
  9134.  asr.l #6,d3
  9135.  divs d5,d3
  9136. .OKNOWITSNEG
  9137.  muls d3,d6
  9138.  add.w #256*4,d6
  9139.  asr.w #2,d6
  9140.  clr.b d6
  9141.  add.w leftbright,d6
  9142.  bge.s .oklbnn
  9143.  moveq #0,d6
  9144. .oklbnn:
  9145.  move.w d6,leftbright
  9146.  
  9147.  ext.l d3
  9148.  asr.l #2,d3
  9149. ; swap d3
  9150. ; asl.w #8,d3
  9151.  move.w d3,brightspd
  9152.  
  9153.  move.l a6,a3
  9154.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9155.  move.l dst,d0
  9156.  move.l TexturePal,a1
  9157.  add.l #256*32,a1
  9158.  move.l floortile,a0
  9159.  adda.w whichtile,a0
  9160.  jsr pastfloorbright
  9161.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9162. nodrawlineGOUR
  9163.  
  9164.  sub.w #1,disttobot
  9165.  
  9166.  move.w linedir(pc),d3
  9167.  adda.w d3,a6
  9168. ; ext.l d3
  9169. ; sub.l d3,REFPTR
  9170.  move.w tonextline,d3
  9171.  add.w d3,a4
  9172.  asr.w #1,d3
  9173.  add.w d3,d0
  9174.  subq #1,d7
  9175.  bgt dofloorGOUR
  9176.  
  9177. predontdrawfloorGOUR
  9178.  move.l (a7)+,a0
  9179.  
  9180. dontdrawfloorGOUR:
  9181.  
  9182.  rts
  9183.  
  9184. REFPTR: dc.l 0
  9185.  
  9186. dofloornoclipGOUR:
  9187. ; move.w (a2)+,d0
  9188.  move.w rightsidetab-leftsidetab(a4),d2
  9189.  addq #1,d2
  9190.  move.w (a4),d1
  9191.  move.w d1,leftedge
  9192.  move.w d2,rightedge
  9193.  
  9194.  sub.w d1,d2
  9195.  
  9196.  move.l a2,d6
  9197.  asl.l #2,d6
  9198.  ext.l d0
  9199.  divs.l d0,d6
  9200.  move.l d6,d5
  9201.  asr.l #7,d5
  9202.  asr.l #2,d5
  9203. ; addq #5,d5
  9204. ; add.w lighttype,d5
  9205.  
  9206.  moveq #0,d1
  9207.  moveq #0,d3
  9208.  move.w leftbrighttab-leftsidetab(a4),d1
  9209.  add.w d5,d1
  9210.  bge.s .okbl
  9211.  moveq #0,d1
  9212. .okbl:
  9213. ; asr.w #1,d1
  9214.  cmp.w #30,d1
  9215.  ble.s .okdl
  9216.  move.w #30,d1
  9217. .okdl:
  9218.  
  9219.  move.w rightbrighttab-leftsidetab(a4),d3
  9220.  add.w d5,d3
  9221.  bge.s .okbr
  9222.  moveq #0,d3
  9223. .okbr:
  9224. ; asr.w #1,d3
  9225.  cmp.w #30,d3
  9226.  ble.s .okdr
  9227.  move.w #30,d3
  9228. .okdr:
  9229.  
  9230. ; sub.w d1,d3
  9231. ; asl.w #8,d1
  9232. ; move.l d1,leftbright
  9233. ; swap d3
  9234. ; asr.l #5,d3
  9235. ; divs d2,d3
  9236. ; ext.l d3
  9237. ; asl.l #5,d3
  9238. ; swap d3
  9239. ; asl.w #8,d3
  9240. ; move.l d3,brightspd
  9241.  
  9242.  sub.w d1,d3
  9243.  asl.w #8,d1
  9244.  move.w d1,leftbright
  9245.  swap d3
  9246.  ext.l d2
  9247.  divs.l d2,d3
  9248.  asr.l #8,d3
  9249.  move.w d3,brightspd
  9250.  
  9251.  move.l a6,a3
  9252.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  9253.  move.l d6,d0
  9254.  move.l d0,dst
  9255.  move.l TexturePal,a1
  9256.  add.l #256*32,a1
  9257.  move.l floortile,a0
  9258.  adda.w whichtile,a0
  9259.  jsr pastfloorbright
  9260.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  9261.  sub.w #1,disttobot
  9262.  
  9263.  move.w linedir(pc),d3
  9264.  adda.w d3,a6
  9265. ; ext.l d3
  9266. ; sub.l d3,REFPTR
  9267.  
  9268.  move.w tonextline,d3
  9269.  add.w d3,a4
  9270.  asr.w #1,d3
  9271.  add.w d3,d0
  9272.  subq #1,d7
  9273.  bgt dofloornoclipGOUR
  9274.  
  9275.  bra predontdrawfloorGOUR
  9276.  
  9277.  
  9278.  
  9279. dists:
  9280. ; incbin "floordists"
  9281. drawit: dc.w 0
  9282.  
  9283. LineToUse: dc.l 0
  9284.  
  9285. ***************************
  9286. * Right then, time for the floor
  9287. * routine...
  9288. * For test purposes, give it
  9289. * a3 = point to screen
  9290. * d0= z distance away
  9291. * and sinval+cosval must be set up.
  9292. ***************************
  9293.  
  9294. BLACKFLOOR:
  9295.  moveq #0,d0
  9296.  bra.s DOBLACK
  9297.  
  9298. SimpleFloorLine:
  9299.  
  9300.  CACHE_OFF d2
  9301.  
  9302.  move.l #doacrossline,a1
  9303.  move.w leftedge(pc),d1
  9304.  move.w rightedge(pc),d3
  9305.  sub.w d1,d3
  9306.  lea (a1,d1.w*4),a1
  9307.  move.w (a1,d3.w*4),d4
  9308.  move.w #$4e75,(a1,d3.w*4)
  9309.  
  9310.  tst.b CLRNOFLOOR
  9311.  bne.s BLACKFLOOR
  9312.  
  9313.  move.l #PLAINSCALE,a2
  9314.  
  9315.  move.w d0,d2
  9316.  move.w lighttype,d1
  9317.  asr.w #8,d2
  9318.  add.w #5,d1
  9319.  add.w d2,d1
  9320.  bge.s .fixedbright
  9321.  moveq #0,d1
  9322. .fixedbright:
  9323.  cmp.w #28,d1
  9324.  ble.s .smallbright
  9325.  move.w #28,d1
  9326. .smallbright:
  9327.  lea (a2,d1.w*2),a2
  9328.  
  9329.  move.w whichtile,d0
  9330.  move.w d0,d1
  9331.  and.w #$3,d1
  9332.  and.w #$300,d0
  9333.  lsl.b #6,d1
  9334.  move.b d1,d0
  9335.  move.w d0,tstwhich
  9336.  move.w (a2,d0.w),d0
  9337.  
  9338. DOBLACK:
  9339.  jsr (a1)
  9340.  move.w d4,(a1,d3.w*4)
  9341.  
  9342.  CACHE_ON d2
  9343.  
  9344.  rts
  9345.  
  9346. tstwhich: dc.w 0
  9347. whichtile: dc.w 0
  9348.   
  9349. PLAINSCALE: 
  9350. ;incbin "ab3:includes/plainscale"
  9351.   
  9352. storeit: dc.l 0
  9353.  
  9354. doacrossline:
  9355. val SET 0
  9356.  REPT 32
  9357.  move.w d0,val(a3)
  9358. val SET val+4
  9359.  ENDR
  9360. val SET val+4
  9361.  REPT 32
  9362.  move.w d0,val(a3)
  9363. val SET val+4
  9364.  ENDR
  9365. val SET val+4
  9366.  REPT 32
  9367.  move.w d0,val(a3)
  9368. val SET val+4
  9369.  ENDR
  9370.  rts
  9371.  
  9372.  
  9373. leftedge: dc.w 0
  9374. rightedge: dc.w 0
  9375.  
  9376. rndpt: dc.l rndtab
  9377.  
  9378.  
  9379. dst: dc.l 0
  9380.  
  9381. FloorLine:
  9382.  
  9383.  move.l floortile,a0
  9384.  adda.w whichtile,a0
  9385.  move.w lighttype,d1
  9386.  move.l d0,dst    ; *4
  9387.  move.l d0,d2    ; *4
  9388. *********************
  9389. * Old version
  9390.  asr.l #2,d2
  9391.  asr.l #8,d2
  9392.  add.w #5,d1
  9393. *********************
  9394. ; asr.w #3,d2
  9395. ; sub.w #4,d2
  9396. ; cmp.w #6,d2
  9397. ; blt.s flbrbr
  9398. ; move.w #6,d2
  9399. ;flbrbr:
  9400. *********************
  9401.  add.w d2,d1
  9402.  bge.s .fixedbright
  9403.  moveq #0,d1
  9404. .fixedbright:
  9405.  cmp.w #28,d1
  9406.  ble.s .smallbright
  9407.  move.w #28,d1
  9408. .smallbright:
  9409.  move.l TexturePal,a1
  9410.  add.l #256*32,a1
  9411.  add.l floorbright(pc,d1.w*4),a1
  9412.  bra pastfloorbright
  9413.  
  9414. ConstCol: dc.w 0
  9415.  
  9416. BumpLine:
  9417.  
  9418.  tst.b smoothbumps
  9419.  beq.s Chunky
  9420.  
  9421.  move.l #SmoothTile,a0
  9422.  lea Smoothscalecols,a1
  9423.  bra pastast
  9424.  
  9425. Chunky:
  9426.  
  9427.  moveq #0,d2
  9428.  move.l #Bumptile,a0
  9429.  move.w whichtile,d2
  9430.  adda.w d2,a0
  9431.  ror.l #2,d2
  9432.  lsr.w #6,d2
  9433.  rol.l #2,d2
  9434.  and.w #15,d2
  9435.  move.l #ConstCols,a1
  9436.  move.w (a1,d2.w*2),ConstCol
  9437.  lea Bumpscalecols,a1
  9438.  
  9439. pastast:
  9440.  move.w lighttype,d1
  9441.  
  9442.  move.l d0,dst
  9443.  
  9444.  move.l d0,d2
  9445. *********************
  9446. * Old version
  9447.  asr.l #2,d2
  9448.  asr.l #8,d2
  9449.  add.w #5,d1
  9450. *********************
  9451. ; asr.w #3,d2
  9452. ; sub.w #4,d2
  9453. ; cmp.w #6,d2
  9454. ; blt.s flbrbr
  9455. ; move.w #6,d2
  9456. ;flbrbr:
  9457. *********************
  9458.  add.w d2,d1
  9459.  bge.s .fixedbright
  9460.  moveq #0,d1
  9461. .fixedbright:
  9462.  cmp.w #31,d1
  9463.  ble.s .smallbright
  9464.  move.w #31,d1
  9465. .smallbright:
  9466.  add.l floorbright(pc,d1.w*4),a1
  9467.  bra pastfloorbright
  9468.  
  9469.  
  9470. floorbright:
  9471.  dc.l 512*0
  9472.  dc.l 512*1
  9473.  dc.l 512*2
  9474.  dc.l 512*3
  9475.  dc.l 512*4
  9476.  
  9477.  dc.l 512*5
  9478.  dc.l 512*6
  9479.  dc.l 512*7
  9480.  dc.l 512*8
  9481.  dc.l 512*9
  9482.  
  9483.  dc.l 512*10
  9484.  dc.l 512*11
  9485.  dc.l 512*12
  9486.  dc.l 512*13
  9487.  dc.l 512*14
  9488.  
  9489.  dc.l 512*15
  9490.  dc.l 512*16
  9491.  dc.l 512*17
  9492.  dc.l 512*18
  9493.  dc.l 512*19
  9494.  
  9495.  dc.l 512*20
  9496.  dc.l 512*21
  9497.  dc.l 512*22
  9498.  dc.l 512*23
  9499.  dc.l 512*24
  9500.  
  9501.  dc.l 512*25
  9502.  dc.l 512*26
  9503.  dc.l 512*27
  9504.  dc.l 512*28
  9505.  dc.l 512*29
  9506.  
  9507.  dc.l 512*30
  9508.  dc.l 512*31
  9509.  
  9510. widthleft: dc.w 0
  9511. scaleval: dc.w 0
  9512. sxoff: dc.l 0
  9513. szoff: dc.l 0
  9514. xoff34: dc.w 0
  9515. zoff34: dc.w 0
  9516. scosval: dc.w 0
  9517. ssinval: dc.w 0
  9518.  
  9519.  
  9520. floorsetbright:
  9521.  move.l #walltiles,a0
  9522.  
  9523. pastfloorbright:
  9524.  
  9525.  move.l d0,d1
  9526.  muls cosval,d1    ; change in x across whole width
  9527.  move.l d0,d2
  9528.  muls sinval,d2    ; change in z across whole width
  9529.  neg.l d2
  9530.  ifne CHEESEY
  9531.  asr.l #3,d2
  9532.  asr.l #3,d1
  9533.  endc
  9534.  ifeq CHEESEY
  9535.  asr.l #2,d2
  9536.  asr.l #2,d1
  9537.  endc
  9538. scaleprog:
  9539.  move.w scaleval(pc),d3
  9540.  beq.s .samescale
  9541.  bgt.s .scaledown
  9542.  neg.w d3
  9543.  asr.l d3,d1
  9544.  asr.l d3,d2
  9545.  bra.s .samescale
  9546. .scaledown:
  9547.  asl.l d3,d1
  9548.  asl.l d3,d2
  9549. .samescale
  9550.  
  9551.  
  9552.  move.l d1,d3 ;    z cos
  9553.  move.l d3,d6
  9554.  move.l d3,d5
  9555.  asr.l #1,d6
  9556.  add.l d6,d3
  9557.  asr.l #1,d3
  9558.  
  9559.  move.l d2,d4    ; z sin
  9560.  move.l d4,d6
  9561.  asr.l #1,d6
  9562.  add.l d4,d6
  9563.  add.l d3,d4
  9564.  neg.l d4    ; start x
  9565.  
  9566.  asr.l #1,d6    ; zsin/2
  9567.  sub.l d6,d5    ; start z
  9568.  
  9569.  add.l sxoff,d4
  9570.  add.l szoff,d5
  9571.  
  9572.  tst.b FULLSCR
  9573.  beq.s .nob
  9574.  
  9575.  moveq #0,d6
  9576.  move.w leftedge(pc),d6
  9577.  beq.s .nomultleftB
  9578.  
  9579.  add.l d6,d6
  9580.  divs #3,d6
  9581.  ext.l d6
  9582.  
  9583.  move.l d1,a4
  9584.  move.l d2,a5
  9585.  
  9586.  muls.l d6,d1
  9587.  asr.l #7,d1
  9588.  add.l d1,d4
  9589.  
  9590.  muls.l d6,d2
  9591.  asr.l #7,d2
  9592.  add.l d2,d5
  9593.  move.l a4,d1
  9594.  move.l a5,d2
  9595.  
  9596.  move.w leftedge(pc),d6
  9597.  
  9598. .nomultleftB:
  9599.  
  9600.  move.w d4,startsmoothx
  9601.  move.w d5,startsmoothz
  9602.  
  9603.  asr.l #8,d4
  9604.  asl.l #8,d5
  9605. ; add.w szoff,d5
  9606. ; add.w sxoff,d4
  9607. ; and.w #63,d4
  9608. ; and.w #63*256,d5
  9609.  
  9610.  move.w d4,d5
  9611.  
  9612.  asr.l #6,d1
  9613.  asr.l #6,d2
  9614.  divs.l #3,d1
  9615.  divs.l #3,d2
  9616.  
  9617.  bra.s doneallmult
  9618.  
  9619. .nob 
  9620.  
  9621.  moveq #0,d6
  9622.  move.w leftedge(pc),d6
  9623.  beq.s nomultleft
  9624.  
  9625.  move.l d1,a4
  9626.  move.l d2,a5
  9627.  
  9628.  muls.l d6,d1
  9629.  asr.l #7,d1
  9630.  add.l d1,d4
  9631.  
  9632.  muls.l d6,d2
  9633.  asr.l #7,d2
  9634.  add.l d2,d5
  9635.  move.l a4,d1
  9636.  move.l a5,d2
  9637.  
  9638.  move.w leftedge(pc),d6
  9639.  
  9640. nomultleft:
  9641.  
  9642.  move.w d4,startsmoothx
  9643.  move.w d5,startsmoothz
  9644.  
  9645.  asr.l #8,d4
  9646.  asl.l #8,d5
  9647.  
  9648.  
  9649. ; add.w szoff,d5
  9650. ; add.w sxoff,d4
  9651. ; and.w #63,d4
  9652. ; and.w #63*256,d5
  9653.  
  9654.  move.w d4,d5
  9655.  
  9656.  asr.l #7,d1
  9657.  asr.l #7,d2
  9658. ; divs.l #3,d1
  9659. ; divs.l #3,d2
  9660.  
  9661. doneallmult:
  9662.  
  9663.  move.w d1,a4
  9664.  move.w d2,a5
  9665.  asl.l #8,d2
  9666. ; and.w #%0011111100000000,d2
  9667.  asr.l #8,d1
  9668.  move.w d1,d2
  9669.  ifeq CHEESEY
  9670.  move.l #$3fff3fff,d1
  9671.  endc
  9672.  ifne CHEESEY
  9673.  move.l #$1fff1fff,d1
  9674.  endc
  9675.  and.l d1,d5
  9676. ; swap d5
  9677. ; move.w startsmoothz,d5
  9678. ; swap d5
  9679. ; swap d2
  9680. ; move.w a5,d2
  9681. ; swap d2
  9682.  
  9683. ***********************************
  9684.  
  9685.  
  9686.  tst.b DOUBLEWIDTH
  9687.  beq.s .nodoub
  9688.  
  9689.  and.b #$fe,d6
  9690.  
  9691.  move.w d6,a2
  9692.  moveq #0,d0 
  9693.  move.w rightedge(pc),d3 
  9694.  lea (a3,a2.w),a3 
  9695.  move.w d3,d7
  9696.  sub.w a2,d7
  9697.  asr.w #1,d7
  9698.  move.w startsmoothx,d3
  9699.  
  9700.  tst.b usewater
  9701.  bne texturedwaterDOUB
  9702. ; tst.b gourfloor
  9703.  bra gouraudfloorDOUB
  9704.  
  9705. .nodoub:
  9706.  
  9707.  move.w d6,a2
  9708.  moveq #0,d0 
  9709.  move.w rightedge(pc),d3 
  9710.  lea (a3,a2.w),a3 
  9711.  move.w d3,d7
  9712.  sub.w a2,d7
  9713.  
  9714. intofirststrip:
  9715. allintofirst:
  9716.  
  9717.  move.w startsmoothx,d3
  9718.  
  9719. tstwat:
  9720.  
  9721.  tst.b usewater
  9722.  bne texturedwater
  9723. ; tst.b gourfloor
  9724.  bra gouraudfloor
  9725.  
  9726.  
  9727.  
  9728. ******************************
  9729. * BumpMap the floor/ceiling! *
  9730.  tst.b usebumps
  9731.  bne.s BumpMap
  9732. ******************************
  9733.  
  9734. ordinary:
  9735.  moveq #0,d0
  9736.  
  9737.  dbra d7,acrossscrn
  9738.  rts
  9739.  
  9740. usebumps: dc.w $0
  9741. smoothbumps: dc.w $0
  9742. gourfloor: dc.w 0
  9743.  
  9744.  include "ab3:source_4000/bumpmap.s"
  9745.  
  9746.  CNOP 0,4
  9747. backbefore:
  9748.  and.w d1,d5
  9749.  move.b (a0,d5.w*4),d0
  9750.  add.w a4,d3
  9751.  addx.l d6,d5
  9752.  move.w (a1,d0.w*2),(a3)
  9753.  addq #4,a3
  9754.  dbcs d7,acrossscrn
  9755.  dbcc d7,backbefore
  9756.  bra.s past1
  9757.  
  9758. acrossscrn:
  9759.  and.w d1,d5
  9760.  move.b (a0,d5.w*4),d0
  9761.  add.w a4,d3
  9762.  addx.l d2,d5
  9763.  move.w (a1,d0.w*2),(a3)
  9764.  addq #4,a3
  9765.  dbcs d7,acrossscrn
  9766.  dbcc d7,backbefore
  9767. past1:
  9768.  bcc.s gotoacross
  9769.  
  9770.  move.w d4,d7
  9771.  bne.s .notdoneyet
  9772.  rts
  9773. .notdoneyet:
  9774.  
  9775.  cmp.w #32,d7
  9776.  ble.s .notoowide
  9777.  move.w #32,d7
  9778. .notoowide
  9779.  sub.w d7,d4  
  9780.  addq #4,a3
  9781.  
  9782.  dbra d7,backbefore
  9783.  rts
  9784.  
  9785.  
  9786. gotoacross:
  9787.  
  9788.  move.w d4,d7
  9789.  bne.s .notdoneyet
  9790.  rts
  9791. .notdoneyet:
  9792.  
  9793.  cmp.w #32,d7
  9794.  ble.s .notoowide
  9795.  move.w #32,d7
  9796. .notoowide
  9797.  sub.w d7,d4  
  9798.  addq #4,a3
  9799.  
  9800.  dbra d7,acrossscrn
  9801.  rts
  9802.  
  9803. leftbright: dc.l 0
  9804. brightspd: dc.l 0
  9805.  
  9806. gouraudfloor:
  9807.  
  9808.  move.w leftbright,d0
  9809.  move.l d1,d4
  9810.  move.w brightspd,d1
  9811.  
  9812.  move.w d7,d3
  9813.  asr.w #1,d7
  9814.  btst #0,d3
  9815.  beq.s .nosingle1
  9816.  move.w d5,d3
  9817.  move.l d5,d6
  9818.  lsr.w #8,d3
  9819.  swap d6
  9820.  move.b d3,d6
  9821.  move.w d0,d3
  9822.  ifeq CHEESEY
  9823.  move.b (a0,d6.w*4),d3
  9824.  endc
  9825.  ifne CHEESEY
  9826.  move.b (a0,d6.w),d3
  9827.  endc
  9828.  
  9829.  add.w d1,d0
  9830.  add.l d2,d5
  9831.  and.l d4,d5
  9832.  move.b (a1,d3.w),(a3)+
  9833. .nosingle1
  9834.  
  9835.  move.w d7,d3
  9836.  asr.w #1,d7
  9837.  btst #0,d3
  9838.  beq.s .nosingle2
  9839.  move.w d5,d3
  9840.  move.l d5,d6
  9841.  lsr.w #8,d3
  9842.  swap d6
  9843.  move.b d3,d6
  9844.  move.w d0,d3
  9845.  ifeq CHEESEY
  9846.  move.b (a0,d6.w*4),d3
  9847.  endc
  9848.  ifne CHEESEY
  9849.  move.b (a0,d6.w),d3
  9850.  endc
  9851.  add.w d1,d0
  9852.  add.l d2,d5
  9853.  and.l d4,d5
  9854.  move.l d5,d6
  9855.  swap d6
  9856.  move.b (a1,d3.w),(a3)+
  9857.  move.w d5,d3
  9858.  lsr.w #8,d3
  9859.  move.b d3,d6
  9860.  move.w d0,d3
  9861.  ifeq CHEESEY
  9862.  move.b (a0,d6.w*4),d3
  9863.  endc
  9864.  ifne CHEESEY
  9865.  move.b (a0,d6.w),d3
  9866.  endc
  9867.  add.w d1,d0
  9868.  add.l d2,d5
  9869.  and.l d4,d5
  9870.  move.b (a1,d3.w),(a3)+
  9871.  
  9872. .nosingle2
  9873.  
  9874.  move.l d5,d6
  9875.  swap d6
  9876.  
  9877.  dbra d7,acrossscrngour
  9878.  rts
  9879.  
  9880.  CNOP 0,4
  9881.  
  9882. acrossscrngour:
  9883.  move.w d5,d3
  9884.  lsr.w #8,d3
  9885.  move.b d3,d6
  9886.  move.w d0,d3
  9887.  ifeq CHEESEY
  9888.  move.b (a0,d6.w*4),d3
  9889.  endc
  9890.  ifne CHEESEY
  9891.  move.b (a0,d6.w),d3
  9892.  endc
  9893.  add.w d1,d0
  9894.  add.l d2,d5
  9895.  and.l d4,d5
  9896.  move.l d5,d6
  9897.  swap d6
  9898.  move.b (a1,d3.w),(a3)+
  9899.  move.w d5,d3
  9900.  lsr.w #8,d3
  9901.  move.b d3,d6
  9902.  move.w d0,d3
  9903.  ifeq CHEESEY
  9904.  move.b (a0,d6.w*4),d3
  9905.  endc
  9906.  ifne CHEESEY
  9907.  move.b (a0,d6.w),d3
  9908.  endc
  9909.  add.w d1,d0
  9910.  add.l d2,d5
  9911.  and.l d4,d5
  9912.  move.l d5,d6
  9913.  swap d6
  9914.  move.b (a1,d3.w),(a3)+
  9915.  move.w d5,d3
  9916.  lsr.w #8,d3
  9917.  move.b d3,d6
  9918.  move.w d0,d3
  9919.  ifeq CHEESEY
  9920.  move.b (a0,d6.w*4),d3
  9921.  endc
  9922.  ifne CHEESEY
  9923.  move.b (a0,d6.w),d3
  9924.  endc
  9925.  add.w d1,d0
  9926.  add.l d2,d5
  9927.  and.l d4,d5
  9928.  move.l d5,d6
  9929.  swap d6
  9930.  move.b (a1,d3.w),(a3)+
  9931.  move.w d5,d3
  9932.  lsr.w #8,d3
  9933.  move.b d3,d6
  9934.  move.w d0,d3
  9935.  ifeq CHEESEY
  9936.  move.b (a0,d6.w*4),d3
  9937.  endc
  9938.  ifne CHEESEY
  9939.  move.b (a0,d6.w),d3
  9940.  endc
  9941.  add.w d1,d0
  9942.  add.l d2,d5
  9943.  and.l d4,d5
  9944.  move.l d5,d6
  9945.  swap d6
  9946.  move.b (a1,d3.w),(a3)+
  9947.  dbra d7,acrossscrngour
  9948.  
  9949.  rts
  9950.  
  9951.  
  9952. gouraudfloorDOUB:
  9953.  
  9954.  move.w leftbright,d0
  9955.  move.l d1,d4
  9956.  move.w brightspd,d1
  9957.  add.w d1,d1
  9958.  add.l d2,d2
  9959.  
  9960.  move.w d7,d3
  9961.  asr.w #1,d7
  9962.  btst #0,d3
  9963.  beq.s .nosingle1
  9964.  move.w d5,d3
  9965.  move.l d5,d6
  9966.  lsr.w #8,d3
  9967.  swap d6
  9968.  move.b d3,d6
  9969.  move.w d0,d3
  9970.  ifeq CHEESEY
  9971.  move.b (a0,d6.w*4),d3
  9972.  endc
  9973.  ifne CHEESEY
  9974.  move.b (a0,d6.w),d3
  9975.  endc
  9976.  add.w d1,d0
  9977.  add.l d2,d5
  9978.  and.l d4,d5
  9979.  move.w (a1,d3.w),(a3)+
  9980. .nosingle1
  9981.  
  9982.  move.w d7,d3
  9983.  asr.w #1,d7
  9984.  btst #0,d3
  9985.  beq.s .nosingle2
  9986.  move.w d5,d3
  9987.  move.l d5,d6
  9988.  lsr.w #8,d3
  9989.  swap d6
  9990.  move.b d3,d6
  9991.  move.w d0,d3
  9992.  ifeq CHEESEY
  9993.  move.b (a0,d6.w*4),d3
  9994.  endc
  9995.  ifne CHEESEY
  9996.  move.b (a0,d6.w),d3
  9997.  endc
  9998.  add.w d1,d0
  9999.  add.l d2,d5
  10000.  and.l d4,d5
  10001.  move.l d5,d6
  10002.  swap d6
  10003.  move.w (a1,d3.w),(a3)+
  10004.  move.w d5,d3
  10005.  lsr.w #8,d3
  10006.  move.b d3,d6
  10007.  move.w d0,d3
  10008.  ifeq CHEESEY
  10009.  move.b (a0,d6.w*4),d3
  10010.  endc
  10011.  ifne CHEESEY
  10012.  move.b (a0,d6.w),d3
  10013.  endc
  10014.  add.w d1,d0
  10015.  add.l d2,d5
  10016.  and.l d4,d5
  10017.  move.w (a1,d3.w),(a3)+
  10018.  
  10019. .nosingle2
  10020.  
  10021.  move.l d5,d6
  10022.  swap d6
  10023.  
  10024.  dbra d7,acrossscrngourD
  10025.  rts
  10026.  
  10027.  CNOP 0,4
  10028.  
  10029. acrossscrngourD:
  10030.  move.w d5,d3
  10031.  lsr.w #8,d3
  10032.  move.b d3,d6
  10033.  move.w d0,d3
  10034.  ifeq CHEESEY
  10035.  move.b (a0,d6.w*4),d3
  10036.  endc
  10037.  ifne CHEESEY
  10038.  move.b (a0,d6.w),d3
  10039.  endc
  10040.  add.w d1,d0
  10041.  add.l d2,d5
  10042.  and.l d4,d5
  10043.  move.l d5,d6
  10044.  swap d6
  10045.  move.w (a1,d3.w),(a3)+
  10046.  move.w d5,d3
  10047.  lsr.w #8,d3
  10048.  move.b d3,d6
  10049.  move.w d0,d3
  10050.  ifeq CHEESEY
  10051.  move.b (a0,d6.w*4),d3
  10052.  endc
  10053.  ifne CHEESEY
  10054.  move.b (a0,d6.w),d3
  10055.  endc
  10056.  add.w d1,d0
  10057.  add.l d2,d5
  10058.  and.l d4,d5
  10059.  move.l d5,d6
  10060.  swap d6
  10061.  move.w (a1,d3.w),(a3)+
  10062.  move.w d5,d3
  10063.  lsr.w #8,d3
  10064.  move.b d3,d6
  10065.  move.w d0,d3
  10066.  ifeq CHEESEY
  10067.  move.b (a0,d6.w*4),d3
  10068.  endc
  10069.  ifne CHEESEY
  10070.  move.b (a0,d6.w),d3
  10071.  endc
  10072.  add.w d1,d0
  10073.  add.l d2,d5
  10074.  and.l d4,d5
  10075.  move.l d5,d6
  10076.  swap d6
  10077.  move.w (a1,d3.w),(a3)+
  10078.  move.w d5,d3
  10079.  lsr.w #8,d3
  10080.  move.b d3,d6
  10081.  move.w d0,d3
  10082.  ifeq CHEESEY
  10083.  move.b (a0,d6.w*4),d3
  10084.  endc
  10085.  ifne CHEESEY
  10086.  move.b (a0,d6.w),d3
  10087.  endc
  10088.  add.w d1,d0
  10089.  add.l d2,d5
  10090.  and.l d4,d5
  10091.  move.l d5,d6
  10092.  swap d6
  10093.  move.w (a1,d3.w),(a3)+
  10094.  dbra d7,acrossscrngourD
  10095.  
  10096.  rts
  10097.  
  10098.  
  10099. ;backbeforegour:
  10100. ; and.w #63*256+63,d5
  10101. ; move.b (a0,d5.w*4),d0
  10102. ; add.l d1,d0
  10103. ; bcc.s .nomoreb
  10104. ; add.w #256,d0
  10105. ;.nomoreb:
  10106. ; add.w a4,d3
  10107. ; move.w (a1,d0.w*2),(a3)+
  10108. ; addx.l d6,d5
  10109. ; dbcs d7,acrossscrngour
  10110. ; dbcc d7,backbeforegour
  10111. ; rts
  10112. ; bra.s past1gour
  10113.  
  10114. ;acrossscrngour:
  10115. ; and.l #$3f3f,d5 
  10116. ; move.b (a0,d5.w*4),d0
  10117. ; add.l d1,d0
  10118. ; bcc.s .nomoreb
  10119. ; add.w #256,d0
  10120. ;.nomoreb:
  10121. ; add.w a4,d3
  10122. ; move.w (a1,d0.w*2),(a3)+
  10123. ; addx.l d2,d5
  10124. ; dbcs d7,acrossscrngour
  10125. ; dbcc d7,backbeforegour
  10126. ;past1gour:
  10127. ; rts
  10128.  
  10129.  move.w d4,d7
  10130.  bne.s .notdoneyet
  10131.  move.l d0,leftbright
  10132.  
  10133.  rts
  10134. .notdoneyet:
  10135.  
  10136.  cmp.w #32,d7
  10137.  ble.s .notoowide
  10138.  move.w #32,d7
  10139. .notoowide
  10140.  sub.w d7,d4  
  10141.  addq #4,a3
  10142.  
  10143. ; dbra d7,backbeforegour
  10144.  rts
  10145.  
  10146.  
  10147. gotoacrossgour:
  10148.  
  10149.  move.w d4,d7
  10150.  bne.s .notdoneyet
  10151.  rts
  10152. .notdoneyet:
  10153.  
  10154.  cmp.w #32,d7
  10155.  ble.s .notoowide
  10156.  move.w #32,d7
  10157. .notoowide
  10158.  sub.w d7,d4  
  10159.  addq #4,a3
  10160.  
  10161.  dbra d7,acrossscrngour
  10162.  rts
  10163.  
  10164.  
  10165. waterpt: dc.l waterlist
  10166.  
  10167. waterlist:
  10168.  dc.l waterfile
  10169.  dc.l waterfile+2
  10170.  dc.l waterfile+256
  10171.  dc.l waterfile+256+2
  10172.  dc.l waterfile+512
  10173.  dc.l waterfile+512+2
  10174.  dc.l waterfile+768
  10175.  dc.l waterfile+768+2
  10176. ; dc.l waterfile+768
  10177. ; dc.l waterfile+512+2
  10178. ; dc.l waterfile+512
  10179. ; dc.l waterfile+256+2
  10180. ; dc.l waterfile+256
  10181. ; dc.l waterfile+2
  10182. endwaterlist:
  10183.  
  10184. watertouse: dc.l waterfile
  10185.  
  10186. wtan: dc.w 0
  10187. wateroff: dc.l 0
  10188.  
  10189. REFLECTIONWATER:
  10190.  
  10191.  move.l d1,d4
  10192.  
  10193.  add.l wateroff,d5
  10194.  
  10195.  move.l TexturePal,a1
  10196.  add.l #256*16,a1
  10197.  move.l dst,d0
  10198.  clr.b d0
  10199.  
  10200.  add.w d0,d0
  10201.  cmp.w #12*512,d0
  10202.  blt.s .notoowater
  10203.  move.w #12*512,d0
  10204.  
  10205. .notoowater:
  10206.   
  10207.  adda.w d0,a1
  10208.  
  10209.  move.l dst,d0
  10210.  asl.w #7,d0
  10211.  add.w wtan,d0
  10212.  and.w #8191,d0
  10213.  move.l #SineTable,a0
  10214.  move.w (a0,d0.w),d0
  10215.  ext.l d0
  10216.  
  10217.  move.l dst,d3
  10218.  add.w #300,d3
  10219.  divs d3,d0
  10220.  asr.w #5,d0
  10221.  addq #4,d0
  10222.  cmp.w disttobot,d0
  10223.  blt.s oknotoffbotototr
  10224.  
  10225.  move.w disttobot,d0
  10226.  subq #1,d0
  10227.  
  10228. oknotoffbotototr
  10229.  
  10230. ; move.w dst,d3
  10231. ; asr.w #7,d3
  10232. ; add.w d3,d0
  10233.  
  10234.  muls #320,d0
  10235.  tst.w above
  10236.  beq.s nonnnnnegr
  10237.  neg.l d0
  10238.  
  10239. nonnnnnegr:
  10240.  
  10241.  move.l d0,a6
  10242.  
  10243.  move.l watertouse,a0
  10244.  
  10245. ; move.l #mixtab,a5
  10246.  
  10247.  moveq #0,d1
  10248.  
  10249.  move.w startsmoothx,d3
  10250.  dbra d7,acrossscrnwr
  10251.  rts
  10252.  
  10253. backbeforewr:
  10254.  and.w d1,d5 
  10255.  move.w (a0,d5.w*4),d0
  10256.  move.b (a3,a6.w),d0
  10257.  move.w (a1,d0.w),(a3)+
  10258.  add.w a4,d3
  10259.  addx.l d6,d5
  10260.  dbcs d7,acrossscrnwr
  10261.  dbcc d7,backbeforewr
  10262.  rts
  10263.  
  10264. acrossscrnwr:
  10265.  move.w d5,d3
  10266.  move.l d5,d6
  10267.  lsr.w #8,d3
  10268.  swap d6
  10269.  move.b d3,d6
  10270.  move.w (a0,d6.w*4),d0
  10271.  add.l d2,d5
  10272.  move.w (a4,a6.w),d1
  10273.  addq #2,a4
  10274.  move.b (a3,a6.w),d1
  10275.  move.b (a5,d1.l),d0
  10276.  and.l d4,d5
  10277.  move.w (a1,d0.w),(a3)+
  10278.  dbra d7,acrossscrnwr
  10279.  rts
  10280.  
  10281. texturedwater:
  10282.  
  10283.  move.l d1,d4
  10284.  
  10285.  add.l wateroff,d5
  10286.  
  10287.  move.l TexturePal,a1
  10288.  add.l #256*16,a1
  10289.  move.l dst,d0
  10290.  asr.l #2,d0
  10291.  clr.b d0
  10292.  
  10293.  add.w d0,d0
  10294.  cmp.w #9*512,d0
  10295.  blt.s .notoowater
  10296.  move.w #9*512,d0
  10297. .notoowater:
  10298.   
  10299.  adda.w d0,a1
  10300.  
  10301.  move.l dst,d0
  10302.  asl.w #7,d0
  10303.  add.w wtan,d0
  10304.  and.w #8191,d0
  10305.  move.l #SineTable,a0
  10306.  move.w (a0,d0.w),d0
  10307.  ext.l d0
  10308.  
  10309.  move.l dst,d3
  10310.  add.w #300,d3
  10311.  divs d3,d0
  10312.  asr.w #5,d0
  10313.  addq #4,d0
  10314.  cmp.w disttobot,d0
  10315.  blt.s oknotoffbototot
  10316.  
  10317.  move.w disttobot,d0
  10318.  subq #1,d0
  10319.  
  10320. oknotoffbototot
  10321.  
  10322. ; move.w dst,d3
  10323. ; asr.w #7,d3
  10324. ; add.w d3,d0
  10325.  
  10326.  tst.b DOUBLEHEIGHT
  10327.  beq.s .nodoub
  10328.  and.b #$fe,d0
  10329. .nodoub:
  10330.  
  10331.  muls #320,d0
  10332.  tst.w above
  10333.  beq.s nonnnnneg
  10334.  neg.l d0
  10335.  
  10336. nonnnnneg:
  10337.  
  10338.  move.l d0,a6
  10339.  
  10340.  move.l watertouse,a0
  10341.  
  10342.  move.w startsmoothx,d3
  10343.  dbra d7,acrossscrnw
  10344.  rts
  10345.  
  10346. backbeforew:
  10347.  and.w d1,d5
  10348.  move.w (a0,d5.w*4),d0
  10349.  add.w d0,d0
  10350.  move.b (a3,a6.w),d0
  10351.  move.b (a1,d0.w),(a3)+
  10352.  add.w a4,d3
  10353.  addx.l d6,d5
  10354.  dbcs d7,acrossscrnw
  10355.  dbcc d7,backbeforew
  10356.  rts
  10357.  
  10358. acrossscrnw:
  10359.  move.w d5,d3
  10360.  move.l d5,d6
  10361.  lsr.w #8,d3
  10362.  swap d6
  10363.  move.b d3,d6
  10364.  move.w (a0,d6.w*4),d0
  10365.  add.w d0,d0
  10366.  add.l d2,d5
  10367.  move.b (a3,a6.w),d0
  10368.  and.l d4,d5
  10369.  move.b (a1,d0.w),(a3)+
  10370.  dbra d7,acrossscrnw
  10371.  rts
  10372.  
  10373.  
  10374. texturedwaterDOUB:
  10375.  
  10376.  move.l d1,d4
  10377.  
  10378.  add.l wateroff,d5
  10379.  
  10380.  move.l TexturePal,a1
  10381.  add.l #256*16,a1
  10382.  move.l dst,d0
  10383.  asr.l #2,d0
  10384.  clr.b d0
  10385.  
  10386.  add.w d0,d0
  10387.  cmp.w #9*512,d0
  10388.  blt.s .notoowater
  10389.  move.w #9*512,d0
  10390. .notoowater:
  10391.   
  10392.  adda.w d0,a1
  10393.  
  10394.  move.l dst,d0
  10395.  asl.w #7,d0
  10396.  add.w wtan,d0
  10397.  and.w #8191,d0
  10398.  move.l #SineTable,a0
  10399.  move.w (a0,d0.w),d0
  10400.  ext.l d0
  10401.  
  10402.  move.l dst,d3
  10403.  add.w #300,d3
  10404.  divs d3,d0
  10405.  asr.w #5,d0
  10406.  addq #4,d0
  10407.  cmp.w disttobot,d0
  10408.  blt.s .oknotoffbototot
  10409.  
  10410.  move.w disttobot,d0
  10411.  subq #1,d0
  10412.  
  10413. .oknotoffbototot
  10414.  
  10415. ; move.w dst,d3
  10416. ; asr.w #7,d3
  10417. ; add.w d3,d0
  10418.  
  10419.  tst.b DOUBLEHEIGHT
  10420.  beq.s .nodoub
  10421.  and.b #$fe,d0
  10422. .nodoub:
  10423.  
  10424.  muls #320,d0
  10425.  tst.w above
  10426.  beq.s .nonnnnneg
  10427.  neg.l d0
  10428.  
  10429. .nonnnnneg:
  10430.  
  10431.  move.l d0,a6
  10432.  
  10433.  move.l watertouse,a0
  10434.  
  10435.  add.l d2,d2
  10436.  
  10437.  move.w startsmoothx,d3
  10438.  dbra d7,acrossscrnwD
  10439.  rts
  10440.  
  10441.  
  10442. acrossscrnwD:
  10443.  move.w d5,d3
  10444.  move.l d5,d6
  10445.  lsr.w #8,d3
  10446.  swap d6
  10447.  move.b d3,d6
  10448.  move.w (a0,d6.w*4),d0
  10449.  add.w d0,d0
  10450.  add.l d2,d5
  10451.  move.b (a3,a6.w),d0
  10452.  and.l d4,d5
  10453.  move.w (a1,d0.w),(a3)+
  10454.  dbra d7,acrossscrnwD
  10455.  rts
  10456.  
  10457.  
  10458. usewater: dc.w 0
  10459.  dc.w 0
  10460. startsmoothx: dc.w 0
  10461.  dc.w 0
  10462. startsmoothz: dc.w 0
  10463.  
  10464. ********************************
  10465. *
  10466.  include "AB3:source_4000/ObjDrawHIRES.s"
  10467. *
  10468. ********************************
  10469.  
  10470. numframes:
  10471.  dc.w 0
  10472.  
  10473. alframe: dc.l 0
  10474.  
  10475. alan:
  10476.  dcb.l 8,0
  10477.  dcb.l 8,1
  10478.  dcb.l 8,2
  10479.  dcb.l 8,3
  10480. endalan:
  10481.  
  10482. alanptr: dc.l alan
  10483.  
  10484. Time2: dc.l 0
  10485. dispco:
  10486.  dc.w 0
  10487.  
  10488.  
  10489. key_interrupt:
  10490.         movem.l    d0-d7/a0-a6,-(sp)
  10491.  
  10492. ;        move.w    INTREQR,d0
  10493. ;        btst    #3,d0
  10494. ;        beq    .not_key
  10495.  
  10496.         move.b    $bfdd00,d0
  10497.         btst    #0,d0
  10498.         bne    .key_cont
  10499. ;        move.b    $bfed01,d0
  10500. ;        btst    #0,d0
  10501. ;        bne    .key_cont
  10502.     
  10503. ;        btst    #3,d0
  10504. ;        beq    .key_cont
  10505.  
  10506.         move.b    $bfec01,d0
  10507.         clr.b    $bfec01
  10508.  
  10509.         tst.b    d0
  10510.         beq    .key_cont
  10511.  
  10512. ;        bset    #6,$bfee01
  10513. ;        move.b    #$f0,$bfe401
  10514. ;        move.b    #$00,$bfe501
  10515. ;        bset    #0,$bfee01
  10516.  
  10517.  
  10518.         not.b    d0
  10519.         ror.b    #1,d0
  10520.         lea.l    KeyMap,a0
  10521.         tst.b    d0
  10522.         bmi.b    .key_up
  10523.         and.w    #$7f,d0
  10524. ;        add.w    #1,d0
  10525.         move.b    #$ff,(a0,d0.w)
  10526.         move.b    d0,lastpressed
  10527.  
  10528.         bra.b    .key_cont2
  10529. .key_up:
  10530.         and.w    #$7f,d0
  10531. ;        add.w    #1,d0
  10532.         move.b    #$00,(a0,d0.w)
  10533.  
  10534. .key_cont2
  10535. ;        btst    #0,$bfed01
  10536. ;        beq    .key_cont2
  10537. ;        move.b    #%00000000,$bfee01
  10538. ;        move.b    #%10001000,$bfed01
  10539.  
  10540. ;alt keys should not be independent so overlay ralt on lalt
  10541.  
  10542.         
  10543. .key_cont
  10544.  
  10545. ;        move.w    #$0008,INTREQ
  10546. .not_key:    ;lea.l    $dff000,a5
  10547.  
  10548. ;        lea.l    _keypressed(pc),a0
  10549. ;        move.b    101(a0),d0    ;read LALT
  10550. ;        or.b    102(a0),d0    ;blend it with RALT
  10551. ;        move.b    d0,127(a0)    ;save in combined position
  10552.  
  10553.         movem.l    (sp)+,d0-d7/a0-a6
  10554.  
  10555.         rts
  10556.  
  10557. lastpressed:    dc.b 0
  10558. KInt_CCode    Ds.b    1
  10559. KInt_Askey    Ds.b    1
  10560. KInt_OCode    Ds.w    1
  10561.  
  10562.  
  10563. OldSpace: dc.b 0
  10564. SpaceTapped: dc.b 0
  10565. PLR1_SPCTAP: dc.b 0
  10566. PLR2_SPCTAP: dc.b 0
  10567. PLR1_Ducked: dc.b 0
  10568. ;PLR2_Ducked: dc.b 0
  10569.  even
  10570.  
  10571. PLR1_Squished: dc.w 0
  10572. PLR2_Squished: dc.w 0
  10573. PLR1s_SquishedHeight: dc.l 0
  10574. PLR2s_SquishedHeight: dc.l 0
  10575.  
  10576.  include "ab3:source_4000/PLR1CONTROL.s"
  10577.  include "ab3:source_4000/PLR2CONTROL.s"
  10578.  include "ab3:source_4000/FALL.s"
  10579.  
  10580.  
  10581.  
  10582. *******************************************8
  10583.  
  10584. nullmessage: dcb.b 160,' '
  10585.  
  10586. SENDMESSAGENORET
  10587.  move.l a1,-(a7)
  10588.  bra intosend
  10589.  
  10590. SENDMESSAGE:
  10591.  
  10592.  move.l a1,-(a7)
  10593.  
  10594.  move.l MESSPTR,a1
  10595.  move.l d0,(a1)+
  10596.  cmp.l #ENDMESSBUFF,a1
  10597.  blt.s .okinbuff
  10598.  move.l #MESSAGEBUFFER,a1
  10599. .okinbuff:
  10600.  move.l a1,MESSPTR
  10601.  move.l a1,LASTMESSPTR
  10602.  
  10603. intosend:
  10604.  
  10605.  move.l d0,SCROLLPOINTER
  10606.  move.w #0,SCROLLXPOS
  10607.  add.l #160,d0
  10608.  move.l d0,ENDSCROLL
  10609.  move.w #40,SCROLLTIMER
  10610.  
  10611.  move.l (a7)+,a1
  10612.  rts
  10613.  
  10614. RETRIEVEPREVMESSAGE:
  10615.  
  10616.  move.l LASTMESSPTR,a1
  10617.  cmp.l #MESSAGEBUFFER,a1
  10618.  bgt.s .okinbuff
  10619.  
  10620.  move.l #ENDMESSBUFF,a1
  10621.  
  10622. .okinbuff:
  10623.  
  10624.  move.l -(a1),d0
  10625.  beq.s .nomessage
  10626.  
  10627.  move.l d0,SCROLLPOINTER
  10628.  move.w #0,SCROLLXPOS
  10629.  add.l #160,d0
  10630.  move.l d0,ENDSCROLL
  10631.  move.w #40,SCROLLTIMER
  10632.  
  10633.  move.l a1,LASTMESSPTR
  10634.  
  10635. .nomessage:
  10636.  
  10637.  
  10638.  rts
  10639.  
  10640. MESSAGEBUFFER:
  10641.  ds.l 20
  10642. ENDMESSBUFF:
  10643.  
  10644. MESSPTR: dc.l MESSAGEBUFFER
  10645. LASTMESSPTR: dc.l MESSAGEBUFFER
  10646.  
  10647. **********************************************
  10648.  
  10649.  
  10650.  
  10651. prot7: dc.w 0
  10652.  
  10653. GOTTOSEND: dc.w 0
  10654.  
  10655. COUNTER: dc.w 0
  10656. COUNTER2: dc.w 0
  10657. COUNTSPACE: ds.b 160
  10658.  
  10659. OtherInter:
  10660.  move.w #$0010,$dff000+intreq
  10661.  movem.l d0-d7/a0-a6,-(a7)
  10662.  bra justshake
  10663.  
  10664.     cnop 0,4
  10665.  
  10666. Chan0inter:
  10667.  
  10668.     SAVEREGS
  10669.     jsr    .routine
  10670.     GETREGS
  10671.  
  10672. ;    move.w    #1024+'.',$dff030
  10673.     
  10674.     moveq #1,d0
  10675.     rts
  10676.  
  10677. .routine
  10678.  
  10679.     
  10680. ;w move.w #$0010,$dff000+intreq
  10681.  
  10682.  tst.b doanything
  10683.  bne dosomething
  10684.  
  10685.  movem.l d0-d7/a0-a6,-(a7)
  10686.  bra JUSTSOUNDS
  10687.  
  10688.  rts
  10689.  
  10690. tabheld: dc.w 0
  10691. ObjWork: ds.l 600
  10692. WORKPTR: dc.l 0
  10693. thistime: dc.w 0
  10694.  
  10695. DOALLANIMS:
  10696.  
  10697.  sub.b #1,thistime
  10698.  ble.s .okdosome
  10699.  rts
  10700.  
  10701. .okdosome:
  10702.  move.b #5,thistime
  10703.  
  10704.  
  10705.  move.l #ObjWork,a5
  10706.  move.l ObjectData,a0
  10707. Objectloop2:
  10708.  tst.w (a0)
  10709.  blt doneallobj2
  10710.  move.w 12(a0),d0
  10711.  blt doneobj2
  10712.  move.w d0,GraphicRoom(a0)
  10713.  tst.b worry(a0)
  10714.  beq.s doneobj2
  10715.  
  10716.  move.b 16(a0),d0
  10717.  cmp.b #1,d0
  10718.  blt JUMPALIENANIM
  10719. ; beq JUMPOBJECTANIM
  10720. ; cmp.b #2,d0
  10721. ; beq JUMPBULLET
  10722.  
  10723. doneobj2:
  10724.  
  10725.  adda.w #64,a0
  10726.  addq #8,a5
  10727.  bra Objectloop2
  10728.  
  10729. doneallobj2:
  10730.  rts
  10731.  
  10732. JUMPALIENANIM:
  10733.  
  10734.  moveq #0,d0
  10735.  move.b WhichAnim(a0),d0
  10736. ; 0=walking
  10737. ; 1=attacking
  10738. ; 2=getting hit
  10739. ; 3=dying
  10740.  
  10741.  cmp.b #1,d0
  10742.  blt.s ALWALK
  10743.  beq.s ALATTACK
  10744.  
  10745.  cmp.b #3,d0
  10746.  blt ALGETHIT
  10747.  beq ALDIE
  10748.  
  10749.  bra doneobj2
  10750.  
  10751. ALDIE
  10752.  move.l #10,d0
  10753.  bra intowalk
  10754.  
  10755. ALGETHIT:
  10756.  move.l #9,d0
  10757.  bra intowalk
  10758.  
  10759. ALATTACK:
  10760.  move.l #8,d0
  10761.  bra intowalk
  10762.  
  10763. AUXOBJ: dc.w 0
  10764.  
  10765. ALWALK:
  10766.  
  10767. ; jsr ViewpointToDraw
  10768. ; add.l d0,d0
  10769. ; move.l LINKFILE,a6
  10770. ; add.l #AlienStats,a6
  10771. ; moveq #0,d1
  10772. ; move.b TypeOfThing(a0),d1
  10773. ; muls #AlienStatLen,d1
  10774. ; add.l d1,a6
  10775. ; cmp.w #1,A_GFXType(a6)
  10776. ; bne.s NOSIDES2
  10777.  
  10778.  moveq #0,d0
  10779. intowalk:
  10780.  
  10781. NOSIDES2:
  10782.  
  10783.  move.b d0,2(a5)
  10784.  move.l LINKFILE,a6
  10785.  
  10786.  add.l #AlienAnimData,a6
  10787.  
  10788.  moveq #0,d1
  10789.  move.b TypeOfThing(a0),d1
  10790.  move.w .valtables+4(pc,d1.w*8),d1
  10791. ; muls #A_AnimLen,d1
  10792.  add.l d1,a6
  10793.  
  10794. ; move.l ANIMPOINTER,a6
  10795.  
  10796. ; muls #A_OptLen,d0
  10797.  move.w .valtables+2(pc,d0.w*8),d0
  10798.  add.w d0,a6
  10799.  
  10800.  move.w SecTimer(a0),d1
  10801.  move.w d1,d2
  10802. ; muls #A_FrameLen,d1
  10803.  move.w .valtables(pc,d1.w*8),d1
  10804.  
  10805.  moveq #0,d0
  10806.  move.b 5(a6,d1.w),d0
  10807.  beq.s .nosoundmake
  10808.  
  10809.  movem.l d0-d7/a0-a6,-(a7)
  10810.  subq #1,d0
  10811.  move.w d0,Samplenum
  10812.  clr.b notifplaying
  10813.  move.w (a0),IDNUM
  10814.  move.w #80,Noisevol
  10815.  move.l #ObjRotated,a1
  10816.  move.w (a0),d0
  10817.  lea (a1,d0.w*8),a1
  10818.  move.l (a1),Noisex
  10819.  jsr MakeSomeNoise
  10820.  movem.l (a7)+,d0-d7/a0-a6
  10821. .nosoundmake
  10822.  
  10823.  move.b 6(a6,d1.w),d0
  10824.  beq.s .noaction
  10825.  add.b #1,(a5)
  10826.  move.b d2,1(a5)
  10827. .noaction
  10828.  
  10829.  addq #1,d2
  10830.  
  10831.  moveq #0,d0
  10832.  move.b 7(a6,d1.w),d0
  10833.  beq .nospecial
  10834.  bra .special
  10835.  
  10836. .valtables:
  10837. val SET 0
  10838.  REPT 20
  10839.  dc.w A_FrameLen*val,A_OptLen*val
  10840.  dc.w A_AnimLen*val,0
  10841. val SET val+1
  10842.  ENDR
  10843.  
  10844. .special
  10845.  move.b d0,d3
  10846.  and.w #63,d3
  10847.  lsr.w #6,d0
  10848.  cmp.w #2,d0
  10849.  blt.s .storeval
  10850.  beq.s .randval
  10851.  
  10852.  sub.b #1,4(a5)
  10853.  beq.s .nospecial
  10854.  
  10855.  move.w d3,d2
  10856.  bra.s .nospecial
  10857.  
  10858. .randval:
  10859.  jsr GetRand
  10860.  divs d3,d0
  10861.  swap d0
  10862.  move.w d0,d3
  10863.  
  10864. .storeval:
  10865.  move.b d3,4(a5)
  10866. .nospecial:
  10867.  
  10868. ; move.w d2,d3
  10869.  move.w .valtables2(pc,d2.w*8),d3
  10870. ; muls #A_FrameLen,d3
  10871.  tst.b (a6,d3.w)
  10872.  bge.s .noendanim
  10873.  st 3(a5)
  10874.  move.w #0,d2
  10875. .noendanim
  10876.  move.w d2,SecTimer(a0)
  10877.  
  10878.  bra doneobj2
  10879.  
  10880. .valtables2:
  10881. val SET 0
  10882.  REPT 20
  10883.  dc.w A_FrameLen*val,A_OptLen*val
  10884.  dc.w A_AnimLen*val,0
  10885. val SET val+1
  10886.  ENDR
  10887.  
  10888.  
  10889. JUMPOBJECTANIM:
  10890.  bra doneobj2
  10891.  
  10892. timetodamage: dc.w 0
  10893. SAVESAVE: dc.w 0
  10894.  
  10895. dosomething:
  10896.  
  10897.  
  10898.  
  10899.  addq.w #1,FramesToDraw
  10900.  movem.l d0-d7/a0-a6,-(a7)
  10901.  
  10902.  jsr NARRATOR
  10903.  
  10904.  bsr DOALLANIMS
  10905.  
  10906.  sub.w #1,timetodamage
  10907.  bgt.s .nodam
  10908.  
  10909.  move.w #100,timetodamage
  10910.  
  10911.  move.l PLR1_Roompt,a0
  10912.  move.w ToFloorNoise(a0),d0
  10913.  tst.b PLR1_StoodInTop
  10914.  beq.s .okinbot
  10915.  move.w ToUpperFloorNoise(a0),d0
  10916. .okinbot:
  10917.  
  10918.  move.l LINKFILE,a0
  10919.  add.l #FloorData,a0
  10920.  move.w (a0,d0.w*4),d0    ; damage. 
  10921.  move.l PLR1_Obj,a0
  10922.  add.b d0,damagetaken(a0)
  10923.  
  10924.  move.l PLR2_Roompt,a0
  10925.  move.w ToFloorNoise(a0),d0
  10926.  tst.b PLR2_StoodInTop
  10927.  beq.s .okinbot2
  10928.  move.w ToUpperFloorNoise(a0),d0
  10929. .okinbot2:
  10930.  
  10931.  move.l LINKFILE,a0
  10932.  add.l #FloorData,a0
  10933.  move.w (a0,d0.w*4),d0    ; damage. 
  10934.  
  10935.  move.l PLR2_Obj,a0
  10936.  add.b d0,damagetaken(a0)
  10937.  
  10938. .nodam:
  10939.  
  10940.  move.l #KeyMap,a5
  10941.  
  10942.  tst.b 82(a5)    ;f3
  10943.  beq notogglesound
  10944.  
  10945.  tst.b lasttogsound
  10946.  bne notogglesound2
  10947.  
  10948.  st lasttogsound
  10949.  
  10950.  move.w TOPPOPT,d0
  10951.  addq #1,d0
  10952.  and.w #3,d0
  10953.  move.w d0,TOPPOPT
  10954.  move.b STEROPT(pc,d0.w*2),STEREO
  10955.  
  10956.  
  10957.  move.b STEROPT+1(pc,d0.w*2),d1
  10958.  muls #160,d0
  10959.  add.l #SOUNDOPTSTEXT,d0
  10960.  jsr SENDMESSAGE
  10961.  
  10962.  
  10963.  move.b d1,Prefsfile+1
  10964.  
  10965.  bra pastster
  10966.  
  10967.  STEROPT:
  10968.  dc.b 0,4
  10969.  dc.b $FF,4
  10970.  dc.b 0,8
  10971.  dc.b $ff,8
  10972.  
  10973. lasttogsound: dc.w 0
  10974.  
  10975. SOUNDOPTSTEXT:
  10976. ;      1234567890123456789012345678901234567890
  10977.  dc.b "Four Channel Mono Selected              "
  10978.  dc.b "                                        "
  10979.  dc.b "                                        "
  10980.  dc.b "                                        "
  10981.  
  10982.  dc.b "Four Channel Stereo Selected            "
  10983.  dc.b "                                        "
  10984.  dc.b "                                        "
  10985.  dc.b "                                        "
  10986.  
  10987.  dc.b "Eight Channel Mono Selected             "
  10988.  dc.b "                                        "
  10989.  dc.b "                                        "
  10990.  dc.b "                                        "
  10991.  
  10992.  dc.b "Eight Channel Stereo Selected           "
  10993.  dc.b "                                        "
  10994.  dc.b "                                        "
  10995.  dc.b "                                        "
  10996.  
  10997. LIGHTING: dc.w $FFff
  10998. OLDLTOG: dc.w 0
  10999.  
  11000. pastster:
  11001.  
  11002.  cmp.b #'4',d1
  11003.  seq.s CHANNELDATA+8
  11004.  seq.s CHANNELDATA+12
  11005.  seq.s CHANNELDATA+24
  11006.  seq.s CHANNELDATA+28
  11007.  
  11008. * Mt_init *********************
  11009.  st CHANNELDATA+8
  11010.  st CHANNELDATA
  11011. *******************************
  11012.  
  11013.  move.w #$f,$dff000+dmacon
  11014.  move.l #null,$dff0a0
  11015.  move.w #100,$dff0a4
  11016.  move.w #443,$dff0a6
  11017.  move.w #63,$dff0a8
  11018.  
  11019.  move.l #null2,$dff0b0
  11020.  move.w #100,$dff0b4
  11021.  move.w #443,$dff0b6
  11022.  move.w #63,$dff0b8
  11023.  
  11024.  move.l #null4,$dff0c0
  11025.  move.w #100,$dff0c4
  11026.  move.w #443,$dff0c6
  11027.  move.w #63,$dff0c8
  11028.  
  11029.  move.l #null3,$dff0d0
  11030.  move.w #100,$dff0d4
  11031.  move.w #443,$dff0d6
  11032.  move.w #63,$dff0d8
  11033.  
  11034.  move.l #empty,pos0LEFT
  11035.  move.l #empty,pos1LEFT
  11036.  move.l #empty,pos2LEFT
  11037.  move.l #empty,pos3LEFT
  11038.  move.l #empty,pos0RIGHT
  11039.  move.l #empty,pos1RIGHT
  11040.  move.l #empty,pos2RIGHT
  11041.  move.l #empty,pos3RIGHT
  11042.  move.l #emptyend,Samp0endLEFT
  11043.  move.l #emptyend,Samp1endLEFT
  11044.  move.l #emptyend,Samp2endLEFT
  11045.  move.l #emptyend,Samp3endLEFT
  11046.  move.l #emptyend,Samp0endRIGHT
  11047.  move.l #emptyend,Samp1endRIGHT
  11048.  move.l #emptyend,Samp2endRIGHT
  11049.  move.l #emptyend,Samp3endRIGHT
  11050.  
  11051.  move.w #10,d3
  11052. .willy
  11053.  btst #0,$dff000+intreqrl
  11054.  beq.s .willy
  11055.  move.w #1,$dff000+intreq
  11056.  
  11057.  dbra d3,.willy
  11058.  
  11059.  move.w #$820f,$dff000+dmacon
  11060.  
  11061.  bra notogglesound2
  11062.  
  11063. Prefsfile:
  11064.  dc.b 'k4nx'
  11065.  
  11066. notogglesound:
  11067.  clr.b lasttogsound
  11068. notogglesound2:
  11069.  
  11070.  
  11071.  tst.b 83(a5)
  11072.  beq nolighttoggle
  11073.  tst.b OLDLTOG
  11074.  bne nolighttoggle2
  11075.  st OLDLTOG
  11076.  
  11077.  move.l #LIGHTINGTEXT,d0
  11078.  not.b LIGHTING
  11079.  beq.s .noon
  11080.  add.l #160,d0
  11081. .noon:
  11082.  bra pastlighttext
  11083.  
  11084. LIGHTINGTEXT:
  11085.  dc.b "Lighting Effects Deactivated            "
  11086.  dc.b "                                        "
  11087.  dc.b "                                        "
  11088.  dc.b "                                        "
  11089.  
  11090.  dc.b "Lighting Effects Activated              "
  11091.  dc.b "                                        "
  11092.  dc.b "                                        "
  11093.  dc.b "                                        "
  11094.  
  11095. OLDRET: dc.w 0
  11096. OLDCENT: dc.w 0
  11097. OLDGOOD: dc.w 0
  11098.  
  11099. GOODRENDERTXT:
  11100.  dc.b "Rendering Quality : High                "
  11101.  dc.b "                                        "
  11102.  dc.b "                                        "
  11103.  dc.b "                                        "
  11104. BADRENDERTXT:
  11105.  dc.b "Rendering Quality : Reduced             "
  11106.  dc.b "                                        "
  11107.  dc.b "                                        "
  11108.  dc.b "                                        "
  11109.  
  11110. pastlighttext:
  11111.  
  11112.  jsr SENDMESSAGE
  11113.  
  11114. ; move.l d0,SCROLLPOINTER
  11115. ; move.w #0,SCROLLXPOS
  11116. ; add.l #160,d0
  11117. ; move.l d0,ENDSCROLL
  11118. ; move.w #40,SCROLLTIMER 
  11119.  
  11120.  bra nolighttoggle2
  11121.  
  11122. nolighttoggle:
  11123.  clr.b OLDLTOG
  11124. nolighttoggle2:
  11125.  
  11126.  
  11127.  tst.b 84(a5)
  11128.  beq.s noret
  11129.  tst.b OLDRET
  11130.  bne.s noret2
  11131.  st OLDRET
  11132.  
  11133.  jsr RETRIEVEPREVMESSAGE
  11134.  
  11135.  bra noret2
  11136.  
  11137. noret
  11138.  clr.b OLDRET
  11139. noret2:
  11140.  
  11141.  tst.b 85(a5)
  11142.  beq.s .nogood
  11143.  tst.b OLDGOOD
  11144.  bne.s .nogood2
  11145.  st OLDGOOD
  11146.  
  11147.  move.l #GOODRENDERTXT,d0
  11148.  not.b GOODRENDER
  11149.  bne.s .okgood
  11150.  move.l #BADRENDERTXT,d0
  11151. .okgood:
  11152.  
  11153.  jsr SENDMESSAGE
  11154.  
  11155.  bra .nogood2
  11156.  
  11157. .nogood
  11158.  clr.b OLDGOOD
  11159. .nogood2:
  11160.  
  11161.  
  11162.  tst.b $42(a5)
  11163.  bne.s .tabprsd
  11164.  clr.b tabheld
  11165.  bra.s .noswitch
  11166.  
  11167. .tabprsd:
  11168.  tst.b tabheld
  11169.  bne.s .noswitch
  11170.  not.b MAPON
  11171.  st tabheld
  11172. .noswitch
  11173.  
  11174.  tst.b $3e(a5)
  11175.  sne d0
  11176.  tst.b $1e(a5)
  11177.  sne d1
  11178.  tst.b $2d(a5)
  11179.  sne d2
  11180.  tst.b $2f(a5)
  11181.  sne d3
  11182.  
  11183.  tst.b $3d(a5)
  11184.  sne d4
  11185.  tst.b $3f(a5)
  11186.  sne d5
  11187.  tst.b $1d(a5)
  11188.  sne d6
  11189.  tst.b $1f(a5)
  11190.  sne d7
  11191.  
  11192.  or.b d4,d0
  11193.  or.b d5,d0
  11194.  or.b d6,d1
  11195.  or.b d7,d1
  11196.  or.b d4,d2
  11197.  or.b d6,d2
  11198.  or.b d7,d3
  11199.  or.b d5,d3
  11200.  
  11201.  move.w MAPBRIGHT,d4
  11202.  add.w #2,d4
  11203.  clr.l d5
  11204.  bset d4,d5
  11205.  
  11206.  tst.b d0
  11207.  beq.s .nomapup
  11208.  sub.w d5,mapzoff
  11209. .nomapup 
  11210.  
  11211.  tst.b d1
  11212.  beq.s .nomapdown
  11213.  add.w d5,mapzoff
  11214. .nomapdown 
  11215.  
  11216.  tst.b d2
  11217.  beq.s .nomapleft
  11218.  add.w d5,mapxoff
  11219. .nomapleft 
  11220.  
  11221.  tst.b d3
  11222.  beq.s .nomapright
  11223.  sub.w d5,mapxoff
  11224. .nomapright 
  11225.  
  11226.  tst.b $2e(a5)
  11227.  beq.s .nomapcentre
  11228.  
  11229.  move.w #0,mapxoff
  11230.  move.w #0,mapzoff
  11231.  
  11232. .nomapcentre
  11233.  
  11234. ; move.w STOPOFFSET,d0
  11235. ; tst.b 27(a5)
  11236. ; beq.s .nolookup
  11237. ; sub.w #5,d0
  11238. ; cmp.w #-80,d0
  11239. ; bgt.s .nolookup
  11240. ; move.w #-80,d0
  11241. ;.nolookup:
  11242. ; tst.b 42(a5)
  11243. ; beq.s .nolookdown
  11244. ; add.w #5,d0
  11245. ; cmp.w #80,d0
  11246. ; blt.s .nolookdown
  11247. ; move.w #80,d0
  11248. ;.nolookdown:
  11249. ;
  11250. ; move.w d0,STOPOFFSET
  11251. ; neg.w d0
  11252. ; add.w #120,d0
  11253. ; move.w d0,SMIDDLEY
  11254. ; muls #320*2,d0
  11255. ; move.l d0,SBIGMIDDLEY
  11256.  
  11257.  
  11258. ; jsr INITREC
  11259. ; jsr RECEIVE
  11260.  
  11261. ; tst.l BUFFER
  11262. ; beq.s justshake
  11263. ; st GOTTOSEND
  11264. ; move.l #OtherInter,$6c
  11265.  
  11266. justshake:
  11267.  
  11268. ; cmp.b #'b',Prefsfile+3
  11269. ; bne.s .noback
  11270.  
  11271.  
  11272.  jsr mt_music
  11273.  
  11274.  
  11275.  
  11276. ;.noback:
  11277.  
  11278.  bra dontshowtime
  11279.  
  11280.  tst.b oktodisplay
  11281.  beq dontshowtime
  11282.  clr.b oktodisplay
  11283.  subq.w #1,dispco
  11284.  bgt dontshowtime
  11285.  move.w #10,dispco
  11286.  
  11287.  move.l #TimerScr+10,a0
  11288.  move.l TimeCount,d0
  11289.  bge.s timenotneg
  11290.  move.l #1111*256,d0
  11291. timenotneg:
  11292.  asr.l #8,d0
  11293.  move.l #digits,a1
  11294.  move.w #7,d2
  11295. digitlop
  11296.  divs #10,d0
  11297.  swap d0
  11298.  lea (a1,d0.w*8),a2
  11299.  move.b (a2)+,(a0)
  11300.  move.b (a2)+,24(a0)
  11301.  move.b (a2)+,24*2(a0)
  11302.  move.b (a2)+,24*3(a0)
  11303.  move.b (a2)+,24*4(a0)
  11304.  move.b (a2)+,24*5(a0)
  11305.  move.b (a2)+,24*6(a0)
  11306.  move.b (a2)+,24*7(a0)
  11307.  subq #1,a0
  11308.  swap d0
  11309.  ext.l d0
  11310.  dbra d2,digitlop
  11311.  
  11312.  move.l #TimerScr+10+24*10,a0
  11313.  move.l NumTimes,d0
  11314.  move.l #digits,a1
  11315.  move.w #3,d2
  11316. digitlop2
  11317.  divs #10,d0
  11318.  swap d0
  11319.  lea (a1,d0.w*8),a2
  11320.  move.b (a2)+,(a0)
  11321.  move.b (a2)+,24(a0)
  11322.  move.b (a2)+,24*2(a0)
  11323.  move.b (a2)+,24*3(a0)
  11324.  move.b (a2)+,24*4(a0)
  11325.  move.b (a2)+,24*5(a0)
  11326.  move.b (a2)+,24*6(a0)
  11327.  move.b (a2)+,24*7(a0)
  11328.  subq #1,a0
  11329.  swap d0
  11330.  ext.l d0
  11331.  dbra d2,digitlop2
  11332.  
  11333.  move.l #TimerScr+10+24*20,a0
  11334.  moveq #0,d0
  11335.  move.w FramesToDraw,d0
  11336.  move.l #digits,a1
  11337.  move.w #2,d2
  11338. digitlop3
  11339.  divs #10,d0
  11340.  swap d0
  11341.  lea (a1,d0.w*8),a2
  11342.  move.b (a2)+,(a0)
  11343.  move.b (a2)+,24(a0)
  11344.  move.b (a2)+,24*2(a0)
  11345.  move.b (a2)+,24*3(a0)
  11346.  move.b (a2)+,24*4(a0)
  11347.  move.b (a2)+,24*5(a0)
  11348.  move.b (a2)+,24*6(a0)
  11349.  move.b (a2)+,24*7(a0)
  11350.  subq #1,a0
  11351.  swap d0
  11352.  ext.l d0
  11353.  dbra d2,digitlop3
  11354.  
  11355. dontshowtime:
  11356.  
  11357.  
  11358.  move.l alanptr,a0
  11359.  move.l (a0)+,alframe
  11360.  cmp.l #endalan,a0
  11361.  blt.s nostartalan
  11362.  move.l #alan,a0
  11363. nostartalan:
  11364.  move.l a0,alanptr
  11365.  
  11366.  
  11367.  tst.b READCONTROLS
  11368.  beq nocontrols
  11369.  
  11370.  cmp.b #'s',mors
  11371.  beq control2
  11372.  
  11373.  tst.w PLAYERONEHEALTH
  11374.  bgt .propercontrol
  11375.  
  11376.  move.l #7*2116,hitcol
  11377.  move.l #PLR1_Obj,a0
  11378.  move.w #-1,12+128(a0)
  11379.  
  11380.  clr.b PLR1_fire
  11381.  clr.b PLR1_clicked
  11382.  move.w #0,ADDTOBOBBLE
  11383.  move.l #playercrouched,PLR1s_height
  11384.  move.w #-80,d0
  11385.  move.w d0,STOPOFFSET
  11386.  neg.w d0
  11387.  add.w TOTHEMIDDLE,d0
  11388.  move.w d0,SMIDDLEY
  11389.  muls #320,d0
  11390.  move.l d0,SBIGMIDDLEY
  11391.  jsr PLR1_fall
  11392.  
  11393.  move.l PLR1s_xspdval,d6
  11394.  move.l PLR1s_zspdval,d7
  11395.  
  11396.  tst.b SLOWDOWN
  11397.  beq.s .nofriction
  11398.  
  11399.  neg.l d6
  11400.  ble.s .nobug1
  11401.  asr.l #3,d6
  11402.  add.l #1,d6
  11403.  bra.s .bug1
  11404. .nobug1
  11405.  asr.l #3,d6
  11406. .bug1:
  11407.  
  11408.  neg.l d7
  11409.  ble.s .nobug2
  11410.  asr.l #3,d7
  11411.  add.l #1,d7
  11412.  bra.s .bug2
  11413. .nobug2
  11414.  asr.l #3,d7
  11415. .bug2: 
  11416.  
  11417.  add.l d6,PLR1s_xspdval
  11418.  add.l d7,PLR1s_zspdval
  11419.  
  11420. .nofriction:
  11421.  move.l PLR1s_xspdval,d6
  11422.  move.l PLR1s_zspdval,d7
  11423.  add.l d6,PLR1s_xoff
  11424.  add.l d7,PLR1s_zoff
  11425.  
  11426.  move.w PLR1s_angspd,d3
  11427.  tst.b SLOWDOWN
  11428.  beq.s .nofric
  11429.  asr.w #2,d3
  11430.  bge.s .nneg
  11431.  addq #1,d3
  11432. .nneg:
  11433. .nofric:
  11434.  
  11435.  move.w d3,PLR1s_angspd
  11436.  add.w d3,PLR1s_angpos
  11437.  add.w d3,PLR1s_angpos
  11438.  and.w #8190,PLR1s_angpos
  11439.  
  11440.  bra nocontrols
  11441.  
  11442. .propercontrol:
  11443.  
  11444.  tst.b PLR1MOUSE
  11445.  beq.s PLR1_nomouse
  11446.  bsr PLR1_mouse_control
  11447. PLR1_nomouse:
  11448.  tst.b PLR1KEYS
  11449.  beq.s PLR1_nokeys
  11450.  bsr PLR1_keyboard_control
  11451. PLR1_nokeys:
  11452. ; tst.b PLR1PATH
  11453. ; beq.s PLR1_nopath
  11454. ; bsr PLR1_follow_path
  11455. ;PLR1_nopath:
  11456.  tst.b PLR1JOY
  11457.  beq.s PLR1_nojoy
  11458.  bsr PLR1_JoyStick_control
  11459. PLR1_nojoy: 
  11460.  bra nocontrols
  11461.  
  11462. control2:
  11463.  
  11464.  tst.w PLAYERTWOHEALTH
  11465.  bgt .propercontrol
  11466.  
  11467.  move.l #7*2116,hitcol
  11468.  move.l #PLR1_Obj,a0
  11469.  move.w #-1,12+128(a0)
  11470.  clr.b PLR2_fire
  11471.  move.w #0,ADDTOBOBBLE
  11472.  move.l #playercrouched,PLR2s_height
  11473.  move.w #-80,d0
  11474.  move.w d0,STOPOFFSET
  11475.  neg.w d0
  11476.  add.w TOTHEMIDDLE,d0
  11477.  move.w d0,SMIDDLEY
  11478.  muls #320,d0
  11479.  move.l d0,SBIGMIDDLEY
  11480.  jsr PLR2_fall
  11481.  
  11482.  move.l PLR2s_xspdval,d6
  11483.  move.l PLR2s_zspdval,d7
  11484.  
  11485.  tst.b SLOWDOWN
  11486.  beq.s .nofriction
  11487.  
  11488.  neg.l d6
  11489.  ble.s .nobug1
  11490.  asr.l #3,d6
  11491.  add.l #1,d6
  11492.  bra.s .bug1
  11493. .nobug1
  11494.  asr.l #3,d6
  11495. .bug1:
  11496.  
  11497.  neg.l d7
  11498.  ble.s .nobug2
  11499.  asr.l #3,d7
  11500.  add.l #1,d7
  11501.  bra.s .bug2
  11502. .nobug2
  11503.  asr.l #3,d7
  11504. .bug2: 
  11505.  
  11506.  add.l d6,PLR2s_xspdval
  11507.  add.l d7,PLR2s_zspdval
  11508.  
  11509. .nofriction:
  11510.  move.l PLR2s_xspdval,d6
  11511.  move.l PLR2s_zspdval,d7
  11512.  add.l d6,PLR2s_xoff
  11513.  add.l d7,PLR2s_zoff
  11514.  
  11515.  move.w PLR2s_angspd,d3
  11516.  tst.b SLOWDOWN
  11517.  beq.s .nofric
  11518.  asr.w #2,d3
  11519.  bge.s .nneg
  11520.  addq #1,d3
  11521. .nneg:
  11522. .nofric:
  11523.  
  11524.  move.w d3,PLR2s_angspd
  11525.  add.w d3,PLR2s_angpos
  11526.  add.w d3,PLR2s_angpos
  11527.  and.w #8190,PLR2s_angpos
  11528.  
  11529.  bra.s nocontrols
  11530.  
  11531. .propercontrol:
  11532.  tst.b PLR2MOUSE
  11533.  beq.s PLR2_nomouse
  11534.  bsr PLR2_mouse_control
  11535. PLR2_nomouse:
  11536.  tst.b PLR2KEYS
  11537.  beq.s PLR2_nokeys
  11538.  bsr PLR2_keyboard_control
  11539. PLR2_nokeys:
  11540. ; tst.b PLR2PATH
  11541. ; beq.s PLR2_nopath
  11542. ; bsr PLR1_follow_path
  11543. ;PLR2_nopath:
  11544.  tst.b PLR2JOY
  11545.  beq.s PLR2_nojoy
  11546.  bsr PLR2_JoyStick_control
  11547. PLR2_nojoy: 
  11548.  
  11549.  
  11550. nocontrols:
  11551.  
  11552.  move.l #$dff000,a6
  11553.  
  11554.  cmp.b #'4',Prefsfile+1
  11555.  bne.s nomuckabout
  11556.  
  11557.  move.w #$0,d0 
  11558.  tst.b NoiseMade0LEFT
  11559.  beq.s noturnoff0
  11560.  move.w #1,d0
  11561. noturnoff0:
  11562.  tst.b NoiseMade0RIGHT
  11563.  beq.s noturnoff1
  11564.  or.w #2,d0
  11565. noturnoff1:
  11566.  tst.b NoiseMade1RIGHT
  11567.  beq.s noturnoff2
  11568.  or.w #4,d0
  11569. noturnoff2:
  11570.  tst.b NoiseMade1LEFT
  11571.  beq.s noturnoff3
  11572.  or.w #8,d0
  11573. noturnoff3:
  11574.  
  11575. *********************
  11576.  and.w #$fffe,d0
  11577. *********************
  11578.  
  11579.     move.w d0,dmacon(a6)
  11580.  
  11581. nomuckabout:
  11582.  
  11583.  
  11584. ; tst.b PLR2_fire
  11585. ; beq.s firenotpressed2
  11586. ; fire was pressed last time.
  11587. ; btst #7,$bfe001
  11588. ; bne.s firenownotpressed2
  11589. ; fire is still pressed this time.
  11590. ; st PLR2_fire
  11591. ; bra dointer
  11592.  
  11593. firenownotpressed2:
  11594. ; fire has been released.
  11595. ; clr.b PLR2_fire
  11596. ; bra dointer
  11597.  
  11598. firenotpressed2
  11599.  
  11600. ; fire was not pressed last frame...
  11601.  
  11602. ; btst #7,$bfe001
  11603. ; if it has still not been pressed, go back above
  11604. ; bne.s firenownotpressed2
  11605. ; fire was not pressed last time, and was this time, so has
  11606. ; been clicked.
  11607. ; st PLR2_clicked
  11608. ; st PLR2_fire
  11609.  
  11610. dointer
  11611.  
  11612. JUSTSOUNDS:
  11613.  
  11614.  tst.b dosounds
  11615.  beq.s .notthing
  11616.  
  11617.  jsr FLUSHSOUNDQUEUE
  11618.  
  11619.  cmp.b #'4',Prefsfile+1
  11620.     beq fourchannel
  11621.  
  11622.  btst #1,$dff000+intreqr
  11623.     bne.s newsampbitl
  11624.  
  11625. .notthing:
  11626.  
  11627.  movem.l (a7)+,d0-d7/a0-a6
  11628.  
  11629.  moveq #0,d0
  11630.  rts
  11631.  
  11632.  
  11633. dosounds: dc.w 0
  11634.  
  11635. swappedem: dc.w 0
  11636.  
  11637. newsampbitl:
  11638.  
  11639.  
  11640.  
  11641.  move.w #$200,$dff000+intreq
  11642.  
  11643.  tst.b CHANNELDATA
  11644.  bne nochannel0
  11645.  
  11646.  move.l pos0LEFT,a0
  11647.  move.l pos2LEFT,a1
  11648.  
  11649.  move.l #tab,a2
  11650.  
  11651.  moveq #0,d0
  11652.  moveq #0,d1
  11653.  move.b vol0left,d0
  11654.  move.b vol2left,d1
  11655.  cmp.b d1,d0
  11656.  slt swappedem
  11657.  bge.s fbig0
  11658.  
  11659. ; d1 is bigger so scale d0 and use d1
  11660. ; as audiochannel volume.
  11661.  
  11662.  exg a0,a1
  11663.  asl.w #6,d0
  11664.  divs d1,d0
  11665.  lsl.w #8,d0
  11666.  adda.w d0,a2
  11667.  move.w d1,$dff0a8
  11668.  bra.s donechan0
  11669.  
  11670. fbig0:
  11671.  tst.w d0
  11672.  beq.s donechan0
  11673.  asl.w #6,d1
  11674.  divs d0,d1
  11675.  lsl.w #8,d1
  11676.  adda.w d1,a2
  11677.  move.w d0,$dff0a8
  11678.  
  11679. donechan0:
  11680.  
  11681.  move.l Aupt0,a3
  11682.  move.l a3,$dff0a0
  11683.  move.l Auback0,Aupt0
  11684.  move.l a3,Auback0
  11685.  
  11686.  move.l Auback0,a3
  11687.  
  11688.  moveq #0,d0
  11689.  moveq #0,d1
  11690.  moveq #0,d2
  11691.  moveq #0,d3
  11692.  moveq #0,d4
  11693.  moveq #0,d5
  11694.  move.w #49,d7
  11695. loop:
  11696.  move.l (a0)+,d0
  11697.  move.b (a1)+,d1
  11698.  move.b (a1)+,d2
  11699.  move.b (a1)+,d3
  11700.  move.b (a1)+,d4
  11701.  move.b (a2,d3.w),d5
  11702.  swap d5
  11703.  move.b (a2,d1.w),d5
  11704.  asl.l #8,d5
  11705.  move.b (a2,d2.w),d5
  11706.  swap d5
  11707.  move.b (a2,d4.w),d5
  11708.  add.l d5,d0
  11709.  move.l d0,(a3)+
  11710.  dbra d7,loop
  11711.  
  11712.  tst.b swappedem
  11713.  beq.s .ok23
  11714.  exg a0,a1
  11715. .ok23:
  11716.  
  11717.  cmp.l Samp0endLEFT,a0
  11718.  blt.s .notoffendsamp1
  11719.  move.l #empty,a0
  11720.  move.l #emptyend,Samp0endLEFT
  11721.  move.b #0,vol0left
  11722.  clr.w LEFTCHANDATA+32
  11723.  move.w #0,LEFTCHANDATA+2
  11724. .notoffendsamp1:
  11725.  
  11726.  cmp.l Samp2endLEFT,a1
  11727.  blt.s .notoffendsamp2
  11728.  move.l #empty,a1
  11729.  move.l #emptyend,Samp2endLEFT
  11730.  move.b #0,vol2left
  11731.  clr.w LEFTCHANDATA+32+8
  11732.  move.w #0,LEFTCHANDATA+2+8
  11733. .notoffendsamp2:
  11734.  
  11735.  move.l a0,pos0LEFT
  11736.  move.l a1,pos2LEFT
  11737.  
  11738. nochannel0:
  11739.  
  11740.  tst.b CHANNELDATA+16
  11741.  bne nochannel1
  11742.  
  11743.  
  11744.  move.l pos0RIGHT,a0
  11745.  move.l pos2RIGHT,a1
  11746.  
  11747.  move.l Aupt1,a3
  11748.  move.l a3,$dff0b0
  11749.  move.l Auback1,Aupt1
  11750.  move.l a3,Auback1
  11751.  
  11752.  move.l #tab,a2
  11753.  
  11754.  moveq #0,d0
  11755.  moveq #0,d1
  11756.  move.b vol0right,d0
  11757.  move.b vol2right,d1
  11758.  cmp.b d1,d0
  11759.  slt swappedem
  11760.  bge.s fbig1
  11761.  
  11762. ; d1 is bigger so scale d0 and use d1
  11763. ; as audiochannel volume.
  11764.  
  11765.  exg a0,a1
  11766.  asl.w #6,d0
  11767.  divs d1,d0
  11768.  lsl.w #8,d0
  11769.  adda.w d0,a2
  11770.  move.w d1,$dff0b8
  11771.  bra.s donechan1
  11772.  
  11773. fbig1:
  11774.  tst.w d0
  11775.  beq.s donechan1
  11776.  asl.w #6,d1
  11777.  divs d0,d1
  11778.  lsl.w #8,d1
  11779.  adda.w d1,a2
  11780.  move.w d0,$dff0b8
  11781.  
  11782. donechan1:
  11783.  moveq #0,d0
  11784.  moveq #0,d1
  11785.  moveq #0,d2
  11786.  moveq #0,d3
  11787.  moveq #0,d4
  11788.  moveq #0,d5
  11789.  move.w #49,d7
  11790. loop2:
  11791.  move.l (a0)+,d0
  11792.  move.b (a1)+,d1
  11793.  move.b (a1)+,d2
  11794.  move.b (a1)+,d3
  11795.  move.b (a1)+,d4
  11796.  move.b (a2,d3.w),d5
  11797.  swap d5
  11798.  move.b (a2,d1.w),d5
  11799.  asl.l #8,d5
  11800.  move.b (a2,d2.w),d5
  11801.  swap d5
  11802.  move.b (a2,d4.w),d5
  11803.  add.l d5,d0
  11804.  move.l d0,(a3)+
  11805.  dbra d7,loop2
  11806.  
  11807.  tst.b swappedem
  11808.  beq.s ok01
  11809.  exg a0,a1
  11810. ok01:
  11811.  
  11812.  cmp.l Samp0endRIGHT,a0
  11813.  blt.s .notoffendsamp1
  11814.  move.l #empty,a0
  11815.  move.l #emptyend,Samp0endRIGHT
  11816.  move.b #0,vol0right
  11817.  clr.w RIGHTCHANDATA+32
  11818.  move.w #0,RIGHTCHANDATA+2
  11819. .notoffendsamp1:
  11820.  
  11821.  cmp.l Samp2endRIGHT,a1
  11822.  blt.s .notoffendsamp2
  11823.  move.l #empty,a1
  11824.  move.l #emptyend,Samp2endRIGHT
  11825.  move.b #0,vol2right
  11826.  clr.w RIGHTCHANDATA+32+8
  11827.  move.w #0,RIGHTCHANDATA+2+8
  11828. .notoffendsamp2:
  11829.  
  11830.  move.l a0,pos0RIGHT
  11831.  move.l a1,pos2RIGHT
  11832.  
  11833. nochannel1:
  11834.  
  11835. ******************* Other two channels
  11836.  
  11837.  move.l pos1LEFT,a0
  11838.  move.l pos3LEFT,a1
  11839.  
  11840.  move.l #tab,a2
  11841.  
  11842.  moveq #0,d0
  11843.  moveq #0,d1
  11844.  move.b vol1left,d0
  11845.  move.b vol3left,d1
  11846.  cmp.b d1,d0
  11847.  slt swappedem
  11848.  bge.s fbig2
  11849.  
  11850. ; d1 is bigger so scale d0 and use d1
  11851. ; as audiochannel volume.
  11852.  
  11853.  exg a0,a1
  11854.  asl.w #6,d0
  11855.  divs d1,d0
  11856.  lsl.w #8,d0
  11857.  adda.w d0,a2
  11858.  move.w d1,$dff0d8
  11859.  bra.s donechan2
  11860.  
  11861. fbig2:
  11862.  tst.w d0
  11863.  beq.s donechan2
  11864.  asl.w #6,d1
  11865.  divs d0,d1
  11866.  lsl.w #8,d1
  11867.  adda.w d1,a2
  11868.  move.w d0,$dff0d8
  11869.  
  11870. donechan2:
  11871.  
  11872.  move.l Aupt2,a3
  11873.  move.l a3,$dff0d0
  11874.  move.l Auback2,Aupt2
  11875.  move.l a3,Auback2
  11876.  
  11877.  moveq #0,d0
  11878.  moveq #0,d1
  11879.  moveq #0,d2
  11880.  moveq #0,d3
  11881.  moveq #0,d4
  11882.  moveq #0,d5
  11883.  move.w #49,d7
  11884. loop3:
  11885.  move.l (a0)+,d0
  11886.  move.b (a1)+,d1
  11887.  move.b (a1)+,d2
  11888.  move.b (a1)+,d3
  11889.  move.b (a1)+,d4
  11890.  move.b (a2,d3.w),d5
  11891.  swap d5
  11892.  move.b (a2,d1.w),d5
  11893.  asl.l #8,d5
  11894.  move.b (a2,d2.w),d5
  11895.  swap d5
  11896.  move.b (a2,d4.w),d5
  11897.  add.l d5,d0
  11898.  move.l d0,(a3)+
  11899.  dbra d7,loop3
  11900.  
  11901.  tst.b swappedem
  11902.  beq.s .ok23
  11903.  exg a0,a1
  11904. .ok23:
  11905.  
  11906.  cmp.l Samp1endLEFT,a0
  11907.  blt.s .notoffendsamp3
  11908.  move.l #empty,a0
  11909.  move.l #emptyend,Samp1endLEFT
  11910.  move.b #0,vol1left
  11911.  clr.w LEFTCHANDATA+32+4
  11912.  move.w #0,LEFTCHANDATA+2+4
  11913. .notoffendsamp3:
  11914.  
  11915.  cmp.l Samp3endLEFT,a1
  11916.  blt.s .notoffendsamp4
  11917.  move.l #empty,a1
  11918.  move.l #emptyend,Samp3endLEFT
  11919.  move.b #0,vol3left
  11920.  clr.w LEFTCHANDATA+32+12
  11921.  move.w #0,LEFTCHANDATA+2+12
  11922. .notoffendsamp4:
  11923.  
  11924.  move.l a0,pos1LEFT
  11925.  move.l a1,pos3LEFT
  11926.  
  11927.  move.l pos1RIGHT,a0
  11928.  move.l pos3RIGHT,a1
  11929.  
  11930.  move.l Aupt3,a3
  11931.  move.l a3,$dff0c0
  11932.  move.l Auback3,Aupt3
  11933.  move.l a3,Auback3
  11934.  
  11935.  move.l #tab,a2
  11936.  
  11937.  moveq #0,d0
  11938.  moveq #0,d1
  11939.  move.b vol1right,d0
  11940.  move.b vol3right,d1
  11941.  cmp.b d1,d0
  11942.  slt.s swappedem
  11943.  bge.s fbig3
  11944.  
  11945.  exg a0,a1
  11946.  asl.w #6,d0
  11947.  divs d1,d0
  11948.  lsl.w #8,d0
  11949.  adda.w d0,a2
  11950.  move.w d1,$dff0c8
  11951.  bra.s donechan3
  11952.  
  11953. fbig3:
  11954.  tst.w d0
  11955.  beq.s donechan3
  11956.  asl.w #6,d1
  11957.  divs d0,d1
  11958.  lsl.w #8,d1
  11959.  adda.w d1,a2
  11960.  move.w d0,$dff0c8
  11961. donechan3:
  11962.  
  11963.  moveq #0,d0
  11964.  moveq #0,d1
  11965.  moveq #0,d2
  11966.  moveq #0,d3
  11967.  moveq #0,d4
  11968.  moveq #0,d5
  11969.  move.w #49,d7
  11970. loop4:
  11971.  move.l (a0)+,d0
  11972.  move.b (a1)+,d1
  11973.  move.b (a1)+,d2
  11974.  move.b (a1)+,d3
  11975.  move.b (a1)+,d4
  11976.  move.b (a2,d3.w),d5
  11977.  swap d5
  11978.  move.b (a2,d1.w),d5
  11979.  asl.l #8,d5
  11980.  move.b (a2,d2.w),d5
  11981.  swap d5
  11982.  move.b (a2,d4.w),d5
  11983.  add.l d5,d0
  11984.  move.l d0,(a3)+
  11985.  dbra d7,loop4
  11986.  
  11987.  tst.b swappedem
  11988.  beq.s .ok23
  11989.  exg a0,a1
  11990. .ok23:
  11991.  
  11992.  cmp.l Samp1endRIGHT,a0
  11993.  blt.s notoffendsamp3
  11994.  move.l #empty,a0
  11995.  move.l #emptyend,Samp1endRIGHT
  11996.  move.b #0,vol1right
  11997.  clr.w RIGHTCHANDATA+32+4
  11998.  move.w #0,RIGHTCHANDATA+2+4
  11999. notoffendsamp3:
  12000.  
  12001.  cmp.l Samp3endRIGHT,a1
  12002.  blt.s notoffendsamp4
  12003.  move.l #empty,a1
  12004.  move.l #emptyend,Samp3endRIGHT
  12005.  move.b #0,vol3right
  12006.  clr.w RIGHTCHANDATA+32+12
  12007.  move.w #0,RIGHTCHANDATA+2+12
  12008. notoffendsamp4:
  12009.  
  12010.  move.l a0,pos1RIGHT
  12011.  move.l a1,pos3RIGHT
  12012.  
  12013.  movem.l (a7)+,d0-d7/a0-a6
  12014. ; tst.b counting
  12015. ; beq .nostartcounter
  12016. ; JSR STARTCOUNT
  12017. ;.nostartcounter:
  12018.  
  12019.  move.w #$820f,$dff000+dmacon
  12020.  
  12021.  moveq #0,d0
  12022.  rts
  12023.  
  12024. ***********************************
  12025. * 4 channel sound routine
  12026. ***********************************
  12027.  
  12028. fourchannel:
  12029.  
  12030.  move.l #$dff000,a6
  12031.  
  12032.  tst.b LEFTCHANDATA
  12033.  bne.s NoChan0sound
  12034.  
  12035.  btst #7,intreqrl(a6)
  12036.  beq.s nofinish0
  12037. ; move.w #0,LEFTCHANDATA+2
  12038. ; st LEFTCHANDATA+1
  12039.  move.l #null,$a0(a6)
  12040.  move.w #100,$a4(a6) 
  12041.  move.w #$0080,intreq(a6)
  12042. nofinish0:
  12043.  
  12044.  tst.b NoiseMade0pLEFT
  12045.  beq.s NoChan0sound
  12046.  
  12047.  move.l Samp0endLEFT,d0
  12048.  move.l pos0LEFT,d1
  12049.  sub.l d1,d0
  12050.  lsr.l #1,d0
  12051.  move.w d0,$a4(a6)
  12052.  move.l d1,$a0(a6)
  12053.  ext.l d0
  12054.  divs #100,d0
  12055.  move.w d0,playnull0
  12056.  move.w #$8201,dmacon(a6)
  12057.  moveq #0,d0
  12058.  move.b vol0left,d0
  12059.  move.w d0,$a8(a6)
  12060.  
  12061. NoChan0sound:
  12062.  
  12063. *****************************************
  12064. *****************************************
  12065.  
  12066.  btst #0,intreqr(a6)
  12067.  beq.s nofinish1
  12068.  move.l #null,$b0(a6)
  12069.  move.w #100,$b4(a6)
  12070.  move.w #$0100,intreq(a6)
  12071. nofinish1:
  12072.  
  12073.  tst.b NoiseMade0pRIGHT
  12074.  beq.s NoChan1sound
  12075.  
  12076.  move.l Samp0endRIGHT,d0
  12077.  move.l pos0RIGHT,d1
  12078.  sub.l d1,d0
  12079.  lsr.l #1,d0
  12080.  move.w d0,$b4(a6)
  12081.  move.l d1,$b0(a6)
  12082.  ext.l d0
  12083.  divs #100,d0
  12084.  move.w d0,playnull1
  12085.  move.w #$8202,dmacon(a6)
  12086.  moveq #0,d0
  12087.  move.b vol0right,d0
  12088.  move.w d0,$b8(a6)
  12089.  
  12090. NoChan1sound:
  12091.  
  12092. *****************************************
  12093. *****************************************
  12094.  
  12095.  btst #1,intreqr(a6)
  12096.  beq.s nofinish2
  12097.  move.l #null,$c0(a6)
  12098.  move.w #100,$c4(a6)
  12099.  move.w #$0200,intreq(a6)
  12100. nofinish2:
  12101.  
  12102.  tst.b NoiseMade1pRIGHT
  12103.  beq.s NoChan2sound
  12104.  
  12105.  move.l Samp1endRIGHT,d0
  12106.  move.l pos1RIGHT,d1
  12107.  sub.l d1,d0
  12108.  lsr.l #1,d0
  12109.  move.w d0,$c4(a6)
  12110.  ext.l d0
  12111.  divs #100,d0
  12112.  move.w d0,playnull2
  12113.  
  12114.  move.l d1,$c0(a6)
  12115.  move.w #$8204,dmacon(a6)
  12116.  moveq #0,d0
  12117.  move.b vol1right,d0
  12118.  move.w d0,$c8(a6)
  12119.  
  12120. NoChan2sound:
  12121.  
  12122. *****************************************
  12123. *****************************************
  12124.  
  12125.  btst #2,intreqr(a6)
  12126.  beq.s nofinish3
  12127.  move.l #null,$d0(a6)
  12128.  move.w #100,$d4(a6)
  12129.  move.w #$0400,intreq(a6)
  12130. nofinish3:
  12131.  
  12132.  tst.b NoiseMade1pLEFT
  12133.  beq.s NoChan3sound
  12134.  
  12135.  move.l Samp1endLEFT,d0
  12136.  move.l pos1LEFT,d1
  12137.  sub.l d1,d0
  12138.  lsr.l #1,d0
  12139.  move.w d0,$d4(a6)
  12140.  ext.l d0
  12141.  divs #100,d0
  12142.  move.w d0,playnull3
  12143.  move.l d1,$d0(a6)
  12144.  move.w #$8208,dmacon(a6)
  12145.  moveq #0,d0
  12146.  move.b vol1left,d0
  12147.  move.w d0,$d8(a6)
  12148.  
  12149. NoChan3sound:
  12150.  
  12151. nomorechannels:
  12152.  
  12153.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  12154.  move.l #0,NoiseMade0LEFT
  12155.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  12156.  move.l #0,NoiseMade0RIGHT
  12157.  
  12158. ; tst.b playnull0
  12159. ; beq.s .nnul
  12160. ; sub.b #1,playnull0
  12161. ; bra.s chan0still
  12162. ;.nnul:
  12163. ;chan0still:
  12164.  
  12165.  tst.b NoiseMade0pLEFT
  12166.  bne.s chan0still
  12167.  tst.w playnull0
  12168.  beq.s nnul0
  12169.  sub.w #1,playnull0
  12170.  bra.s chan0still
  12171. nnul0:
  12172.  move.w #0,LEFTCHANDATA+2
  12173.  clr.w LEFTCHANDATA+32
  12174. chan0still:
  12175.  
  12176.  tst.b NoiseMade0pRIGHT
  12177.  bne.s chan1still    ;it'll never work
  12178.  tst.w playnull1
  12179.  beq.s nnul1
  12180.  sub.w #1,playnull1
  12181.  bra.s chan1still
  12182. nnul1:
  12183.  move.w #0,RIGHTCHANDATA+2
  12184.  clr.w RIGHTCHANDATA+32
  12185. chan1still:
  12186.  
  12187.  tst.b NoiseMade1pRIGHT
  12188.  bne.s chan2still
  12189.  tst.w playnull2
  12190.  beq.s nnul2
  12191.  sub.w #1,playnull2
  12192.  bra.s chan2still
  12193. nnul2:
  12194.  move.w #0,RIGHTCHANDATA+2+4
  12195.  clr.w RIGHTCHANDATA+32+4
  12196. chan2still:
  12197.  
  12198.  tst.b NoiseMade1pLEFT
  12199.  bne.s chan3still
  12200.  tst.w playnull3
  12201.  beq.s nnul3
  12202.  sub.w #1,playnull3
  12203.  bra.s chan3still
  12204. nnul3:
  12205.  move.w #0,LEFTCHANDATA+2+4
  12206.  clr.w LEFTCHANDATA+32+4
  12207.  
  12208. chan3still:
  12209.  
  12210.  
  12211.  movem.l (a7)+,d0-d7/a0-a6
  12212.  
  12213.  moveq #0,d0
  12214.  rts
  12215.  
  12216. backbeat: dc.w 0
  12217.  
  12218. playnull0: dc.w 0
  12219. playnull1: dc.w 0
  12220. playnull2: dc.w 0
  12221. playnull3: dc.w 0
  12222.  
  12223. Samp0endRIGHT: dc.l emptyend
  12224. Samp1endRIGHT: dc.l emptyend
  12225. Samp2endRIGHT: dc.l emptyend
  12226. Samp3endRIGHT: dc.l emptyend
  12227. Samp0endLEFT: dc.l emptyend
  12228. Samp1endLEFT: dc.l emptyend
  12229. Samp2endLEFT: dc.l emptyend
  12230. Samp3endLEFT: dc.l emptyend
  12231.  
  12232. Aupt0: dc.l null
  12233. Auback0: dc.l null+500
  12234. Aupt2: dc.l null3
  12235. Auback2: dc.l null3+500
  12236. Aupt3: dc.l null4
  12237. Auback3: dc.l null4+500
  12238. Aupt1: dc.l null2
  12239. Auback1: dc.l null2+500
  12240.  
  12241. NoiseMade0LEFT: dc.b 0
  12242. NoiseMade1LEFT: dc.b 0
  12243. NoiseMade2LEFT: dc.b 0
  12244. NoiseMade3LEFT: dc.b 0
  12245. NoiseMade0pLEFT: dc.b 0
  12246. NoiseMade1pLEFT: dc.b 0
  12247. NoiseMade2pLEFT: dc.b 0
  12248. NoiseMade3pLEFT: dc.b 0
  12249. NoiseMade0RIGHT: dc.b 0
  12250. NoiseMade1RIGHT: dc.b 0
  12251. NoiseMade2RIGHT: dc.b 0
  12252. NoiseMade3RIGHT: dc.b 0
  12253. NoiseMade0pRIGHT: dc.b 0
  12254. NoiseMade1pRIGHT: dc.b 0
  12255. NoiseMade2pRIGHT: dc.b 0
  12256. NoiseMade3pRIGHT: dc.b 0
  12257.  
  12258. empty: ds.l 100
  12259. emptyend:
  12260.  
  12261. **************************************
  12262. * I want a routine to calculate all the
  12263. * info needed for the sound player to
  12264. * work, given say position of noise, volume
  12265. * and sample number.
  12266.  
  12267. Samplenum: dc.w 0
  12268. Noisex: dc.w 0
  12269. Noisez: dc.w 0
  12270. Noisevol: dc.w 0
  12271. chanpick: dc.w 0
  12272. IDNUM: dc.w 0
  12273. needleft: dc.b 0
  12274. needright: dc.b 0
  12275. STEREO: dc.b $0
  12276. even
  12277. prot6: dc.w 0
  12278.  
  12279.  even
  12280. CHANNELDATA:
  12281. LEFTCHANDATA:
  12282.  dc.l $00000000
  12283.  dc.l $00000000
  12284.  dc.l $FF000000
  12285.  dc.l $FF000000
  12286. RIGHTCHANDATA:
  12287.  dc.l $00000000
  12288.  dc.l $00000000
  12289.  dc.l $FF000000
  12290.  dc.l $FF000000
  12291.  
  12292.  ds.l 8
  12293.  
  12294. RIGHTPLAYEDTAB: ds.l 20
  12295. LEFTPLAYEDTAB: ds.l 20
  12296.  
  12297. SourceEcho: dc.w 0
  12298. PLREcho: dc.w 0
  12299.  
  12300. TimeToWait EQU 0
  12301. Q_IDNUM EQU 2
  12302. Q_Samplenum EQU 4
  12303. Q_notifplaying EQU 5
  12304. Q_LeftVolume EQU 6
  12305. Q_RightVolume EQU 7
  12306. Q_NoiseVol EQU 8
  12307.  
  12308.  
  12309. SOUNDQUEUE:
  12310.  ds.l 4*100
  12311.  
  12312. MakeSomeNoise:
  12313.  
  12314. ; Time to implement a new sound queueing routine.
  12315. ; This routine will queue sound effects in a buffer
  12316. ; which is checked and flushed every screen update.
  12317.  
  12318.  move.l #SOUNDQUEUE,a0
  12319.  move.w #99,d7
  12320. .findfree
  12321.  tst.w (a0)
  12322.  beq.s .foundfree
  12323.  
  12324.  adda.w #16,a0
  12325.  dbra d7,.findfree
  12326.  rts    ; no queue space available.
  12327.  
  12328. .foundfree:
  12329.  
  12330.  move.w IDNUM,Q_IDNUM(a0)
  12331.  move.b Samplenum+1,Q_Samplenum(a0)
  12332.  
  12333.  move.w Noisex,d1
  12334.  muls d1,d1
  12335.  move.w Noisez,d2
  12336.  muls d2,d2
  12337.  move.w Noisevol,d3
  12338.  move.w #32767,noiseloud
  12339.  moveq #1,d0
  12340.  add.l d1,d2
  12341.  beq pastcalc
  12342.  
  12343.  move.w #31,d0
  12344. .findhigh
  12345.  btst d0,d2
  12346.  bne .foundhigh
  12347.  dbra d0,.findhigh
  12348. .foundhigh
  12349.  asr.w #1,d0
  12350.  clr.l d3
  12351.  bset d0,d3
  12352.  move.l d3,d0
  12353.  
  12354.  move.w d0,d3
  12355.  muls d3,d3    ; x*x
  12356.  sub.l d2,d3    ; x*x-a
  12357.  asr.l #1,d3    ; (x*x-a)/2
  12358.  divs d0,d3    ; (x*x-a)/2x
  12359.  sub.w d3,d0    ; second approx
  12360.  bgt .stillnot0
  12361.  move.w #1,d0
  12362. .stillnot0
  12363.  
  12364.  move.w d0,d3
  12365.  muls d3,d3
  12366.  sub.l d2,d3
  12367.  asr.l #1,d3
  12368.  divs d0,d3
  12369.  sub.w d3,d0    ; second approx
  12370.  bgt .stillnot02
  12371.  move.w #1,d0
  12372. .stillnot02
  12373.  
  12374.  move.w Noisevol,d3
  12375.  ext.l d3
  12376.  asl.l #6,d3
  12377.  cmp.l #32767,d3
  12378.  ble.s .nnnn
  12379.  move.l #32767,d3
  12380. .nnnn
  12381.  
  12382.  asr.w #2,d0
  12383.  addq #1,d0
  12384.  divs d0,d3
  12385.  
  12386.  move.w d3,noiseloud
  12387. pastcalc:
  12388.  
  12389.  cmp.w #64,d3
  12390.  ble.s notooloud
  12391.  move.w #64,d3
  12392. notooloud:
  12393.  
  12394.  move.w d3,d4
  12395.  tst.b STEREO
  12396.  beq.s .nodiffleftright
  12397.  
  12398.  move.w d3,d2
  12399.  muls Noisex,d2
  12400.  asl.w #2,d0
  12401.  divs d0,d2
  12402.  
  12403.  bgt.s .quietleft
  12404.  add.w d2,d4
  12405.  bge.s .donequiet
  12406.  move.w #0,d4
  12407.  bra.s .donequiet
  12408. .quietleft:
  12409.  sub.w d2,d3
  12410.  bge.s .donequiet
  12411.  move.w #0,d3
  12412. .donequiet:
  12413.  
  12414. ; d3=leftvol?
  12415. ; d4=rightvol?
  12416.  
  12417. .nodiffleftright:
  12418.  
  12419.  move.b notifplaying,Q_notifplaying(a0)
  12420.  move.b d3,Q_LeftVolume(a0)
  12421.  move.b d4,Q_RightVolume(a0)
  12422.  move.w noiseloud,Q_NoiseVol(a0)
  12423.  move.w #1,(a0)
  12424.  
  12425. .findfree
  12426.  tst.w (a0)
  12427.  beq.s .foundfree
  12428.  
  12429.  adda.w #16,a0
  12430.  dbra d7,.findfree
  12431.  rts    ; no queue space available.
  12432.  
  12433. .foundfree:
  12434.  
  12435. ; put in an echo!
  12436.  
  12437.  moveq #0,d0
  12438.  moveq #0,d1
  12439. ; move.b Echo,d0
  12440.  move.b PLREcho,d1
  12441. ; cmp.w d0,d1
  12442. ; bgt.s .bigd1
  12443. ; move.b d0,d1
  12444. ;.bigd1:
  12445.  tst.b d1
  12446.  beq.s .noecho
  12447.  
  12448.  move.w #$ffff,Q_IDNUM(a0)
  12449.  move.b Samplenum+1,Q_Samplenum(a0)
  12450.  move.b notifplaying,Q_notifplaying(a0)
  12451.  asr.b #2,d3
  12452.  asr.b #2,d4
  12453.  exg d3,d4
  12454.  move.w noiseloud,d0
  12455.  asr.w #2,d0
  12456.  move.w d0,Q_NoiseVol(a0)
  12457.  move.b d3,Q_LeftVolume(a0)
  12458.  move.b d4,Q_RightVolume(a0)
  12459.  move.w d1,(a0)
  12460.  
  12461. .noecho
  12462.  
  12463.  rts
  12464.  
  12465.  
  12466. FLUSHSOUNDQUEUE:
  12467.  
  12468.  
  12469.  move.l #SOUNDQUEUE,a0
  12470.  move.w #99,d7
  12471. .flushloop:
  12472.  
  12473.  move.w (a0),d0
  12474.  beq.s .nosound
  12475.  
  12476.  subq #1,(a0)
  12477.  bgt.s .nosound
  12478.  
  12479.  moveq #0,d3
  12480.  moveq #0,d4
  12481.  move.w Q_IDNUM(a0),IDNUM
  12482.  move.b Q_notifplaying(a0),notifplaying
  12483.  move.b Q_LeftVolume(a0),d3
  12484.  move.b Q_RightVolume(a0),d4
  12485.  move.w Q_NoiseVol(a0),noiseloud
  12486.  move.b Q_Samplenum(a0),Samplenum+1
  12487.  bsr REALLYNOISY
  12488.  
  12489. .nosound:
  12490.  adda.w #16,a0
  12491.  dbra d7,.flushloop
  12492.  
  12493.  rts
  12494.  
  12495. LEFTOFFSET: dc.l 0
  12496. RIGHTOFFSET: dc.l 0
  12497.  
  12498. REALLYNOISY
  12499.  
  12500. ; move.w #$10,$dff000+intena
  12501.  
  12502. ; Plan for new sound handler:
  12503. ; It is sent a sample number,
  12504. ; a position relative to the
  12505. ; player, an id number and a volume.
  12506. ; Also notifplaying.
  12507.     
  12508. ; indirect inputs are the available
  12509. ; channel flags and whether or not
  12510. ; stereo sound is selected.
  12511.  
  12512. ; the algorithm must decide
  12513. ; whether the new sound is more
  12514. ; important than the ones already
  12515. ; playing. Thus an 'importance'
  12516. ; must be calculated, probably
  12517. ; using volume.
  12518.  
  12519. ; The output needs to be:
  12520.  
  12521. ; Write the pointers and volumes of
  12522. ; the sound channels
  12523.  
  12524.  
  12525.  tst.b notifplaying
  12526.  beq.s dontworry
  12527.  
  12528. ; find if we are already playing
  12529.  
  12530.  move.w IDNUM,d0
  12531.  cmp.w #$ffff,d0
  12532.  beq.s dontworry
  12533.  move.w #7,d1
  12534.  lea CHANNELDATA,a3
  12535. findsameasme
  12536.  tst.b (a3)
  12537.  bne.s notavail
  12538.  cmp.w 32(a3),d0
  12539.  beq SameAsMe
  12540. notavail:
  12541.  add.w #4,a3
  12542.  dbra d1,findsameasme
  12543.  bra dontworry
  12544. SameAsMe
  12545. ; move.w #$8010,$dff000+intena
  12546.  rts
  12547.  
  12548. noiseloud: dc.w 0
  12549.  
  12550. dontworry:
  12551.  
  12552. ; Ok its fine for us to play a sound.
  12553. ; So calculate left/right volume.
  12554.  
  12555.  
  12556.     ; d3 contains volume of noise.
  12557.     
  12558.  tst.b STEREO
  12559.  beq NOSTEREO
  12560.  
  12561.  
  12562.  move.w #$ffff,needleft
  12563.  
  12564.  move.l #0,RIGHTOFFSET
  12565.  move.l #0,LEFTOFFSET
  12566.  
  12567.  cmp.b d3,d4
  12568.  bgt.s RightLouder
  12569.  beq.s NoLouder
  12570.  
  12571.  move.l #4,LEFTOFFSET
  12572.  
  12573. ; Left is louder; is it MUCH louder?
  12574.  
  12575.  st needleft
  12576.  move.w d3,d2
  12577.  sub.w d4,d2
  12578.  cmp.w #32,d2
  12579.  slt needright
  12580.  bra aboutsame
  12581.  
  12582. RightLouder:
  12583.  move.l #4,RIGHTOFFSET
  12584.  st needright
  12585.  move.w d4,d2
  12586.  sub.w d3,d2
  12587.  cmp.w #32,d2
  12588.  slt needleft
  12589.  
  12590. aboutsame:
  12591. NoLouder:
  12592.  
  12593.  
  12594. ; Find least important sound on left
  12595.  
  12596.  move.l #0,a2
  12597.  move.l #0,d5
  12598.  move.w #32767,d2
  12599.  move.w IDNUM,d0
  12600.  lea LEFTCHANDATA,a3
  12601.  move.w #3,d1
  12602. FindLeftChannel
  12603.  tst.b (a3)
  12604.  bne.s .notactive
  12605.  cmp.w 32(a3),d0
  12606.  beq.s FOUNDLEFT
  12607.  cmp.w 2(a3),d2
  12608.  blt.s .notactive
  12609.  move.w 2(a3),d2
  12610.  move.l a3,a2
  12611.  move.w d5,d6
  12612.  
  12613. .notactive:
  12614.  add.w #4,a3
  12615.  add.w #1,d5
  12616.  dbra d1,FindLeftChannel
  12617.  move.l a2,a3
  12618.  bra.s gopastleft
  12619. FOUNDLEFT:
  12620.  move.w d5,d6
  12621. gopastleft:
  12622.  move.l a3,d5
  12623.  tst.l d5
  12624.  bne.s FOUNDALEFT
  12625. NONOISE:
  12626. ; move.w #$8010,$dff000+intena
  12627.  rts
  12628. FOUNDALEFT:
  12629.  
  12630.  cmp.w noiseloud,d2
  12631.  bge dorightchan
  12632.  
  12633. ; d6 = channel number
  12634.  cmp.w #$ffff,d0
  12635.  bne.s .noche
  12636.  move.w #$fffe,d0
  12637. .noche:
  12638.  move.w d0,32(a3)
  12639.  move.w noiseloud,2(a3)
  12640.  
  12641.  move.w Samplenum,d5
  12642.  
  12643. ; tst.b Echo
  12644. ; bne.s YESECHO
  12645. ; tst.b SourceEcho
  12646. ; beq.s NOECHO
  12647. ;
  12648. ;YESECHO:
  12649. ;
  12650. ; move.l LINKFILE,a3
  12651. ; add.l #EchoTable,a3
  12652. ; move.b (a3,d5.w),d5
  12653. ;
  12654. ;NOECHO:
  12655.  
  12656.  move.l #SampleList,a3
  12657.  move.l (a3,d5.w*8),a1
  12658.  add.l LEFTOFFSET,a1
  12659.  move.l 4(a3,d5.w*8),a2
  12660.  add.l LEFTOFFSET,a2
  12661.  
  12662.  tst.b d6
  12663.  seq NoiseMade0LEFT
  12664.  beq.s .chan0
  12665.  cmp.b #2,d6
  12666.  slt NoiseMade1LEFT
  12667.  blt .chan1
  12668.  seq NoiseMade2LEFT
  12669.  beq .chan2
  12670.  st NoiseMade3LEFT
  12671.  
  12672.  move.b d5,LEFTPLAYEDTAB+9
  12673.  move.b d3,LEFTPLAYEDTAB+1+9
  12674.  move.b d4,LEFTPLAYEDTAB+2+9
  12675.  move.b d3,vol3left
  12676.  move.l a1,pos3LEFT
  12677.  move.l a2,Samp3endLEFT
  12678.  bra dorightchan
  12679.  
  12680. .chan0: 
  12681.  move.b d5,LEFTPLAYEDTAB
  12682.  move.b d3,LEFTPLAYEDTAB+1
  12683.  move.b d4,LEFTPLAYEDTAB+2
  12684.  move.l a1,pos0LEFT
  12685.  move.l a2,Samp0endLEFT
  12686.  move.b d3,vol0left
  12687.  bra dorightchan
  12688.  
  12689. .chan1:
  12690.  move.b d5,LEFTPLAYEDTAB+3
  12691.  move.b d3,LEFTPLAYEDTAB+1+3
  12692.  move.b d4,LEFTPLAYEDTAB+2+3
  12693.  move.b d3,vol1left
  12694.  move.l a1,pos1LEFT
  12695.  move.l a2,Samp1endLEFT
  12696.  bra dorightchan
  12697.  
  12698. .chan2: 
  12699.  move.b d5,LEFTPLAYEDTAB+6
  12700.  move.b d3,LEFTPLAYEDTAB+1+6
  12701.  move.b d4,LEFTPLAYEDTAB+2+6
  12702.  move.l a1,pos2LEFT
  12703.  move.l a2,Samp2endLEFT
  12704.  move.b d3,vol2left
  12705.  
  12706. dorightchan:
  12707.  
  12708. ; Find least important sound on right
  12709.  
  12710.  move.l #0,a2
  12711.  move.l #0,d5
  12712.  move.w #10000,d2
  12713.  move.w IDNUM,d0
  12714.  lea RIGHTCHANDATA,a3
  12715.  move.w #3,d1
  12716. FindRightChannel
  12717.  tst.b (a3)
  12718.  bne.s .notactive
  12719.  cmp.w 32(a3),d0
  12720.  beq.s FOUNDRIGHT
  12721.  cmp.w 2(a3),d2
  12722.  blt.s .notactive
  12723.  move.w 2(a3),d2
  12724.  move.l a3,a2
  12725.  move.w d5,d6
  12726.  
  12727. .notactive:
  12728.  add.w #4,a3
  12729.  add.w #1,d5
  12730.  dbra d1,FindRightChannel
  12731.  move.l a2,a3
  12732.  bra.s gopastright
  12733. FOUNDRIGHT:
  12734.  move.w d5,d6
  12735. gopastright:
  12736.  move.l a3,d5
  12737.  tst.l d5
  12738.  bne.s FOUNDARIGHT
  12739. tototot:
  12740. ; move.w #$8010,$dff000+intena
  12741.  rts
  12742. FOUNDARIGHT:
  12743.  
  12744.  cmp.w noiseloud,d2
  12745.  bgt.s tototot
  12746.  
  12747. ; d6 = channel number
  12748.  cmp.w #$ffff,d0
  12749.  bne.s .noche
  12750.  move.w #$fffe,d0
  12751. .noche:
  12752.  move.w d0,32(a3)
  12753.  move.w noiseloud,2(a3)
  12754.  
  12755.  move.w Samplenum,d5
  12756.  move.l #SampleList,a3
  12757.  move.l (a3,d5.w*8),a1
  12758.  move.l 4(a3,d5.w*8),a2
  12759.  add.l RIGHTOFFSET,a1
  12760.  add.l RIGHTOFFSET,a2
  12761.  
  12762.  tst.b d6
  12763.  seq NoiseMade0RIGHT
  12764.  beq.s .chan0
  12765.  cmp.b #2,d6
  12766.  slt NoiseMade1RIGHT
  12767.  blt .chan1
  12768.  seq NoiseMade2RIGHT
  12769.  beq .chan2
  12770.  st NoiseMade3RIGHT
  12771.  
  12772.  move.b d5,RIGHTPLAYEDTAB+9
  12773.  move.b d3,RIGHTPLAYEDTAB+1+9
  12774.  move.b d4,RIGHTPLAYEDTAB+2+9
  12775.  move.b d4,vol3right
  12776.  move.l a1,pos3RIGHT
  12777.  move.l a2,Samp3endRIGHT
  12778. ; move.w #$8010,$dff000+intena
  12779.  rts
  12780.  
  12781. .chan0: 
  12782.  move.b d5,RIGHTPLAYEDTAB
  12783.  move.b d3,RIGHTPLAYEDTAB+1
  12784.  move.b d4,RIGHTPLAYEDTAB+2
  12785.  move.l a1,pos0RIGHT
  12786.  move.l a2,Samp0endRIGHT
  12787.  move.b d4,vol0right
  12788. ; move.w #$8010,$dff000+intena
  12789.  rts
  12790.  
  12791. .chan1:
  12792.  move.b d5,RIGHTPLAYEDTAB+3
  12793.  move.b d3,RIGHTPLAYEDTAB+1+3
  12794.  move.b d4,RIGHTPLAYEDTAB+2+3
  12795.  move.b d3,vol1right
  12796.  move.l a1,pos1RIGHT
  12797.  move.l a2,Samp1endRIGHT
  12798. ; move.w #$8010,$dff000+intena
  12799.  rts
  12800.  
  12801. .chan2: 
  12802.  move.b d5,RIGHTPLAYEDTAB+6
  12803.  move.b d3,RIGHTPLAYEDTAB+1+6
  12804.  move.b d4,RIGHTPLAYEDTAB+2+6
  12805.  move.l a1,pos2RIGHT
  12806.  move.l a2,Samp2endRIGHT
  12807.  move.b d3,vol2right
  12808. ; move.w #$8010,$dff000+intena
  12809.  rts
  12810.  
  12811. NOSTEREO:
  12812.  move.l #0,a2
  12813.  move.l #-1,d5
  12814.  move.w #32767,d2
  12815.  move.w IDNUM,d0
  12816.  lea CHANNELDATA,a3
  12817.  move.w #7,d1
  12818.  moveq #-1,d6
  12819.  
  12820. FindChannel
  12821.  tst.b (a3)
  12822.  bne.s .notactive
  12823.  cmp.w 32(a3),d0
  12824.  beq.s FOUNDMYCHAN
  12825.  cmp.w 2(a3),d2
  12826.  blt.s .notactive
  12827.  move.w 2(a3),d2
  12828.  move.l a3,a2
  12829.  move.w d5,d6
  12830.  add.w #1,d6
  12831.  
  12832. .notactive:
  12833.  add.w #4,a3
  12834.  add.w #1,d5
  12835.  dbra d1,FindChannel
  12836.  
  12837.  move.l a2,a3
  12838.  bra.s gopastchan
  12839.  
  12840. FOUNDMYCHAN:
  12841.  move.w 2(a3),d2
  12842.  
  12843. FOUNDCHAN:
  12844.  move.w d5,d6
  12845.  add.w #1,d6
  12846. gopastchan:
  12847.  tst.w d6
  12848.  bge.s FOUNDACHAN
  12849. tooquiet:
  12850. ; move.w #$8010,$dff000+intena
  12851.  rts
  12852. FOUNDACHAN:
  12853.  
  12854. ; d6 = channel number
  12855.  
  12856.  cmp.w noiseloud,d2
  12857.  bgt.s tooquiet
  12858.  
  12859.  cmp.w #$ffff,d0
  12860.  bne.s .noche
  12861.  move.w #$fffe,d0
  12862. .noche:
  12863.  move.w d0,32(a3)
  12864.  move.w noiseloud,2(a3)
  12865.  
  12866.  move.w Samplenum,d5
  12867.  
  12868. ; tst.b Echo
  12869. ; bne.s YESECHO2
  12870. ; tst.b SourceEcho
  12871. ; beq.s NOECHO2
  12872. ;
  12873. ;YESECHO2:
  12874. ;
  12875. ; move.l LINKFILE,a3
  12876. ; add.l #EchoTable,a3
  12877. ; move.b (a3,d5.w),d5
  12878. ;
  12879. ;NOECHO2:
  12880.  
  12881.  move.l #SampleList,a3
  12882.  move.l (a3,d5.w*8),a1
  12883.  move.l 4(a3,d5.w*8),a2
  12884.  
  12885.  tst.b d6
  12886.  beq .chan0
  12887.  cmp.b #2,d6
  12888.  blt .chan1
  12889.  beq .chan2
  12890.  cmp.b #4,d6
  12891.  blt .chan3
  12892.  beq .chan4
  12893.  cmp.b #6,d6
  12894.  blt .chan5
  12895.  beq .chan6
  12896.  st NoiseMade3RIGHT
  12897.  
  12898.  move.b d5,RIGHTPLAYEDTAB+9
  12899.  move.b d3,RIGHTPLAYEDTAB+1+9
  12900.  move.b d4,RIGHTPLAYEDTAB+2+9
  12901.  move.b d4,vol3right
  12902.  move.l a1,pos3RIGHT
  12903.  move.l a2,Samp3endRIGHT
  12904. ; move.w #$8010,$dff000+intena
  12905.  rts
  12906.  
  12907. .chan3:
  12908.  st NoiseMade3LEFT
  12909.  move.b d5,LEFTPLAYEDTAB+9
  12910.  move.b d3,LEFTPLAYEDTAB+1+9
  12911.  move.b d4,LEFTPLAYEDTAB+2+9
  12912.  move.b d3,vol3left
  12913.  move.l a1,pos3LEFT
  12914.  move.l a2,Samp3endLEFT
  12915. ; move.w #$8010,$dff000+intena
  12916.  rts
  12917.  
  12918. .chan0: 
  12919.  st NoiseMade0LEFT
  12920.  move.b d5,LEFTPLAYEDTAB
  12921.  move.b d3,LEFTPLAYEDTAB+1
  12922.  move.b d4,LEFTPLAYEDTAB+2
  12923.  move.l a1,pos0LEFT
  12924.  move.l a2,Samp0endLEFT
  12925.  move.b d3,vol0left
  12926. ; move.w #$8010,$dff000+intena
  12927.  rts
  12928.  
  12929. .chan1:
  12930.  st NoiseMade1LEFT
  12931.  move.b d5,LEFTPLAYEDTAB+3
  12932.  move.b d3,LEFTPLAYEDTAB+1+3
  12933.  move.b d4,LEFTPLAYEDTAB+2+3
  12934.  move.b d3,vol1left
  12935.  move.l a1,pos1LEFT
  12936.  move.l a2,Samp1endLEFT
  12937. ; move.w #$8010,$dff000+intena
  12938.  rts
  12939.  
  12940. .chan2: 
  12941.  st NoiseMade2LEFT
  12942.  move.b d5,LEFTPLAYEDTAB+6
  12943.  move.b d3,LEFTPLAYEDTAB+1+6
  12944.  move.b d4,LEFTPLAYEDTAB+2+6
  12945.  move.l a1,pos2LEFT
  12946.  move.l a2,Samp2endLEFT
  12947.  move.b d3,vol2left
  12948. ; move.w #$8010,$dff000+intena
  12949.  rts
  12950.  
  12951. .chan4: 
  12952.  st NoiseMade0RIGHT
  12953.  move.b d5,RIGHTPLAYEDTAB
  12954.  move.b d3,RIGHTPLAYEDTAB+1
  12955.  move.b d4,RIGHTPLAYEDTAB+2
  12956.  move.l a1,pos0RIGHT
  12957.  move.l a2,Samp0endRIGHT
  12958.  move.b d4,vol0right
  12959. ; move.w #$8010,$dff000+intena
  12960.  rts
  12961.  
  12962. .chan5:
  12963.  st NoiseMade1RIGHT
  12964.  move.b d5,RIGHTPLAYEDTAB+3
  12965.  move.b d3,RIGHTPLAYEDTAB+1+3
  12966.  move.b d4,RIGHTPLAYEDTAB+2+3
  12967.  move.b d3,vol1right
  12968.  move.l a1,pos1RIGHT
  12969.  move.l a2,Samp1endRIGHT
  12970. ; move.w #$8010,$dff000+intena
  12971.  rts
  12972.  
  12973. .chan6: 
  12974.  st NoiseMade2RIGHT
  12975.  move.b d5,RIGHTPLAYEDTAB+6
  12976.  move.b d3,RIGHTPLAYEDTAB+1+6
  12977.  move.b d4,RIGHTPLAYEDTAB+2+6
  12978.  move.l a1,pos2RIGHT
  12979.  move.l a2,Samp2endRIGHT
  12980.  move.b d3,vol2right
  12981. ; move.w #$8010,$dff000+intena
  12982.  rts
  12983.  
  12984. SampleList:
  12985.  dc.l Scream,EndScream
  12986.  dc.l Shoot,EndShoot
  12987.  dc.l Munch,EndMunch
  12988.  dc.l PooGun,EndPooGun
  12989.  dc.l Collect,EndCollect
  12990. ;5
  12991.  dc.l DoorNoise,EndDoorNoise
  12992.  dc.l 0,0
  12993.  dc.l Stomp,EndStomp
  12994.  dc.l LowScream,EndLowScream
  12995.  dc.l BaddieGun,EndBaddieGun
  12996. ;10
  12997.  dc.l SwitchNoise,EndSwitch
  12998.  dc.l Reload,EndReload
  12999.  dc.l NoAmmo,EndNoAmmo
  13000.  dc.l Splotch,EndSplotch
  13001.  dc.l SplatPop,EndSplatPop
  13002. ;15
  13003.  dc.l Boom,EndBoom
  13004.  dc.l Hiss,EndHiss
  13005.  dc.l Howl1,EndHowl1
  13006.  dc.l Howl2,EndHowl2
  13007.  dc.l Pant,EndPant
  13008. ;20
  13009.  dc.l Whoosh,EndWhoosh
  13010.  dc.l ROAR,EndROAR
  13011.  dc.l whoosh,Endwhoosh
  13012.  dc.l 0,0
  13013.  dc.l 0,0
  13014.  dc.l 0,0
  13015.  dc.l 0,0
  13016.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13017.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13018.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13019.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  13020.  
  13021.  dc.l 0
  13022.  
  13023. storeval: dc.w 0
  13024.  
  13025.  include "ab3:source_4000/wallchunk.s"
  13026.  include "ab3:source_4000/newloadfromdisk.s"
  13027.  include "ab3:source_4000/screensetup.s"
  13028.  include "ab3:source_4000/CONTROLLOOP.s"
  13029.  
  13030.  
  13031.  
  13032.  
  13033. saveinters:  
  13034.  dc.w 0
  13035.  
  13036. z: dc.w 10
  13037.  
  13038. notifplaying:
  13039.  dc.w 0
  13040.  
  13041. audpos1: dc.w 0
  13042. audpos1b: dc.w 0
  13043. audpos2: dc.w 0
  13044. audpos2b: dc.w 0
  13045. audpos3: dc.w 0
  13046. audpos3b: dc.w 0
  13047. audpos4: dc.w 0
  13048. audpos4b: dc.w 0
  13049.  
  13050. vol0left: dc.w 0
  13051. vol0right: dc.w 0
  13052. vol1left: dc.w 0
  13053. vol1right: dc.w 0
  13054. vol2left: dc.w 0
  13055. vol2right: dc.w 0
  13056. vol3left: dc.w 0
  13057. vol3right: dc.w 0
  13058.  
  13059. pos: dc.l 0
  13060.  
  13061. pos0LEFT: dc.l empty
  13062. pos1LEFT: dc.l empty
  13063. pos2LEFT: dc.l empty
  13064. pos3LEFT: dc.l empty
  13065. pos0RIGHT: dc.l empty
  13066. pos1RIGHT: dc.l empty
  13067. pos2RIGHT: dc.l empty
  13068. pos3RIGHT: dc.l empty
  13069.  
  13070. numtodo dc.w 0
  13071.  
  13072. npt: dc.w 0
  13073.  
  13074. pretab:
  13075. val SET 0
  13076.  REPT 128
  13077.  dc.b val
  13078. val SET val+1
  13079.  ENDR
  13080. val SET -128
  13081.  REPT 128
  13082.  dc.b val
  13083. val SET val+1
  13084.  ENDR 
  13085.  
  13086. tab:
  13087.  ifeq CHEESEY
  13088.  ds.b 256*65
  13089.  endc
  13090.  
  13091. test: dc.l 0
  13092.  ds.l 30
  13093.  
  13094.  
  13095.  even
  13096. ConstCols:
  13097. ; incbin "ConstCols"
  13098.  even
  13099. Smoothscalecols:
  13100. ; incbin "smoothbumppalscaled"
  13101.  even
  13102. SmoothTile:
  13103. ; incbin "smoothbumptile"
  13104.  even
  13105. Bumpscalecols:
  13106. ; incbin "Bumppalscaled"
  13107.  even
  13108. Bumptile:
  13109. ; incbin "bumptile"
  13110.  even
  13111. scalecols: ;incbin "bytepixpalscaled"
  13112.  even
  13113. ;floorscalecols:
  13114. ; incbin "floor256pal"
  13115. ; ds.w 256*4
  13116.  
  13117.  even
  13118. PaletteAddr: dc.l 0
  13119. ChunkAddr: dc.l 0
  13120. ;walltiles:
  13121. ; dc.l GreenMechanicWALL
  13122. ; dc.l BlueGreyMetalWALL
  13123. ; dc.l TechnoDetailWALL
  13124. ; dc.l BlueStoneWALL
  13125. ; dc.l RedAlertWALL
  13126. ; dc.l RockWALL
  13127. ;
  13128. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  13129. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  13130. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  13131. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  13132. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  13133. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  13134.  
  13135. floortile:
  13136.  dc.l 0
  13137. ; incbin "floortile" 
  13138.  even
  13139. wallrouts:
  13140. ; incbin "2x2WallDraw" 
  13141.  CNOP 0,64
  13142.  
  13143.  ifeq CHEESEY 
  13144. BackPicture:
  13145.  dc.l 0
  13146. ; incbin "rawback"
  13147. EndBackPicture:
  13148.  endc
  13149.  
  13150. drawpt: dc.l 0
  13151. olddrawpt: dc.l 0
  13152. frompt: dc.l 0 
  13153.  
  13154. SineTable:
  13155.  incbin "bigsine"
  13156.  
  13157. angspd: dc.w 0
  13158. flooryoff: dc.w 0
  13159. xoff: dc.l 0
  13160. yoff: dc.l 0
  13161. yvel: dc.l 0
  13162. zoff: dc.l 0
  13163. tyoff: dc.l 0
  13164. xspdval: dc.l 0
  13165. zspdval: dc.l 0
  13166. Zone: dc.w 0
  13167.  
  13168. PLR1: dc.b $ff
  13169.  even
  13170. PLR1_energy: dc.w 191
  13171. PLR1_GunSelected: dc.w 0
  13172. PLR1_cosval: dc.w 0
  13173. PLR1_sinval: dc.w 0
  13174. PLR1_angpos: dc.w 0
  13175. PLR1_angspd: dc.w 0
  13176. PLR1_xoff: dc.l 0
  13177. PLR1_yoff: dc.l 0
  13178. PLR1_yvel: dc.l 0
  13179. PLR1_zoff: dc.l 0
  13180. PLR1_tyoff: dc.l 0
  13181. PLR1_xspdval: dc.l 0
  13182. PLR1_zspdval: dc.l 0
  13183. PLR1_Zone: dc.w 0
  13184. PLR1_Roompt: dc.l 0
  13185. PLR1_FloorSpd: dc.l 0
  13186. PLR2_FloorSpd: dc.l 0
  13187. PLR1_OldRoompt: dc.l 0
  13188. PLR1_PointsToRotatePtr: dc.l 0
  13189. PLR1_ListOfGraphRooms: dc.l 0
  13190. PLR1_oldxoff: dc.l 0
  13191. PLR1_oldzoff: dc.l 0
  13192. PLR1_StoodInTop: dc.b 0
  13193.  even
  13194. PLR1_height: dc.l 0
  13195. PLR1_RoomBright: dc.w 0
  13196.  
  13197. DOUBLEWIDTH: dc.b $0,0
  13198. DOUBLEHEIGHT: dc.b 0,0
  13199. PLR1_TELEPORTED: dc.w 0
  13200. PLR2_TELEPORTED: dc.w 0
  13201.  
  13202.  ds.w 4
  13203.  
  13204. OLDX1: dc.l 0
  13205. OLDX2: dc.l 0
  13206. OLDZ1: dc.l 0
  13207. OLDZ2: dc.l 0
  13208.  
  13209. XDIFF1: dc.l 0
  13210. ZDIFF1: dc.l 0
  13211. XDIFF2: dc.l 0
  13212. ZDIFF2: dc.l 0
  13213.  
  13214. PLR1s_cosval: dc.w 0
  13215. PLR1s_sinval: dc.w 0
  13216. PLR1s_angpos: dc.w 0
  13217. PLR1s_angspd: dc.w 0
  13218. PLR1s_xoff: dc.l 0
  13219. PLR1s_yoff: dc.l 0
  13220. PLR1s_yvel: dc.l 0
  13221. PLR1s_zoff: dc.l 0
  13222. PLR1s_tyoff: dc.l 0
  13223. PLR1s_xspdval: dc.l 0
  13224. PLR1s_zspdval: dc.l 0
  13225. PLR1s_Zone: dc.w 0
  13226. PLR1s_Roompt: dc.l 0
  13227. PLR1s_OldRoompt: dc.l 0
  13228. PLR1s_PointsToRotatePtr: dc.l 0
  13229. PLR1s_ListOfGraphRooms: dc.l 0
  13230. PLR1s_oldxoff: dc.l 0
  13231. PLR1s_oldzoff: dc.l 0
  13232. PLR1s_height: dc.l 0
  13233. PLR1s_targheight: dc.l 0
  13234.  
  13235. PLR1_Echo: dc.w 0
  13236.  
  13237. p1_xoff: dc.l 0
  13238. p1_zoff: dc.l 0
  13239. p1_yoff: dc.l 0
  13240. p1_height: dc.l 0
  13241. p1_angpos: dc.w 0
  13242. p1_bobble: dc.w 0
  13243. p1_clicked: dc.b 0
  13244. p1_spctap: dc.b 0
  13245. p1_ducked: dc.b 0
  13246. p1_gunselected: dc.b 0
  13247. p1_fire: dc.b 0
  13248.  even
  13249. p1_holddown: dc.w 0
  13250.  
  13251.  ds.w 4
  13252.  
  13253. PLR2: dc.b $ff
  13254.  even
  13255. PLR2_GunSelected: dc.w 0
  13256. PLR2_energy: dc.w 191
  13257. PLR2_cosval: dc.w 0
  13258. PLR2_sinval: dc.w 0
  13259. PLR2_angpos: dc.w 0
  13260. PLR2_angspd: dc.w 0
  13261. PLR2_xoff: dc.l 0
  13262. PLR2_yoff: dc.l 0
  13263. PLR2_yvel: dc.l 0
  13264. PLR2_zoff: dc.l 0
  13265. PLR2_tyoff: dc.l 0
  13266. PLR2_xspdval: dc.l 0
  13267. PLR2_zspdval: dc.l 0
  13268. PLR2_Zone: dc.w 0
  13269. PLR2_Roompt: dc.l 0
  13270. PLR2_OldRoompt: dc.l 0
  13271. PLR2_PointsToRotatePtr: dc.l 0
  13272. PLR2_ListOfGraphRooms: dc.l 0
  13273. PLR2_oldxoff: dc.l 0
  13274. PLR2_oldzoff: dc.l 0
  13275. PLR2_StoodInTop: dc.b 0
  13276.  even
  13277. PLR2_height: dc.l 0
  13278. PLR2_Echo: dc.w 0
  13279. Echo: dc.w 0
  13280.  
  13281.  ds.w 4
  13282.  
  13283. PLR2s_cosval: dc.w 0
  13284. PLR2s_sinval: dc.w 0
  13285. PLR2s_angpos: dc.w 0
  13286. PLR2s_angspd: dc.w 0
  13287. PLR2s_xoff: dc.l 0
  13288. PLR2s_yoff: dc.l 0
  13289. PLR2s_yvel: dc.l 0
  13290. PLR2s_zoff: dc.l 0
  13291. PLR2s_tyoff: dc.l 0
  13292. PLR2s_xspdval: dc.l 0
  13293. PLR2s_zspdval: dc.l 0
  13294. PLR2s_Zone: dc.w 0
  13295. PLR2s_Roompt: dc.l 0
  13296. PLR2s_OldRoompt: dc.l 0
  13297. PLR2s_PointsToRotatePtr: dc.l 0
  13298. PLR2s_ListOfGraphRooms: dc.l 0
  13299. PLR2s_oldxoff: dc.l 0
  13300. PLR2s_oldzoff: dc.l 0
  13301. PLR2s_height: dc.l 0
  13302. PLR2s_targheight: dc.l 0
  13303.  
  13304.  ds.w 4
  13305.  
  13306. p2_xoff: dc.l 0
  13307. p2_zoff: dc.l 0
  13308. p2_yoff: dc.l 0
  13309. p2_height: dc.l 0
  13310. p2_angpos: dc.w 0
  13311. p2_bobble: dc.w 0
  13312. p2_clicked: dc.b 0
  13313. p2_spctap: dc.b 0
  13314. p2_ducked: dc.b 0
  13315. p2_gunselected: dc.b 0
  13316. p2_fire: dc.b 0
  13317.  even
  13318. p2_holddown: dc.w 0
  13319.  
  13320. liftanimtab:
  13321.  
  13322. endliftanimtab:
  13323.  
  13324. glassball:
  13325. ; incbin "glassball.inc"
  13326.  
  13327. endglass
  13328. glassballpt: dc.l glassball
  13329.  
  13330. rndtab: ; incbin "randfile"
  13331. endrnd: 
  13332.  
  13333. brightanimtab:
  13334. ; dcb.w 200,20
  13335. ; dc.w 5
  13336. ; dc.w 10,20
  13337. ; dc.w 5
  13338. ; dcb.w 30,20
  13339. ; dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  13340. ; dcb.w 40,0
  13341. ; dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  13342. ; dcb.w 300,0
  13343. ; dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  13344. ; dc.w -1
  13345.  
  13346. Roompt: dc.l 0
  13347. OldRoompt: dc.l 0
  13348.  
  13349. *****************************************************************
  13350.  *
  13351.  include "AB3:source_4000/LevelData2"
  13352.  *
  13353. *****************************************************************
  13354.  
  13355.  
  13356. wallpt: dc.l 0
  13357. floorpt: dc.l 0
  13358.  
  13359. Rotated:
  13360.  ds.l 2*800 
  13361. ObjRotated:
  13362.  ds.l 2*500
  13363.  
  13364. OnScreen:
  13365.  ds.l 2*800 
  13366.  
  13367. startwait: dc.w 0
  13368. endwait: dc.w 0
  13369.  
  13370. ;Faces:
  13371. ; incbin "faces2raw"
  13372.  
  13373. LINKS: dc.l 0
  13374. FLYLINKS: dc.l 0
  13375. *************************************************************
  13376.  
  13377. consttab:
  13378.  ds.b 65536
  13379.  
  13380. ; incbin "constantfile"
  13381.  
  13382. *******************************************************************
  13383.  
  13384.  
  13385.  
  13386. *********************************
  13387.  
  13388. ; include "ab3:source_4000/loadmod.a"
  13389. ; include "ab3:source_4000/proplayer.a"
  13390.  
  13391.  
  13392. darkentab: 
  13393. ;val SET 0
  13394. ; REPT 256
  13395. ; dc.b val
  13396. ;val SET val+1
  13397. ; ENDR
  13398. ; incbin "darkenfile"
  13399.  
  13400.     dc.w 0
  13401. MIDDLEX: dc.w 0
  13402. RIGHTX: dc.w 192
  13403. FULLSCR: dc.w 0
  13404.  
  13405. ;SHADINGTABLE: incbin "SHADEFILE" 
  13406.  
  13407. ******************************************
  13408. * Link file !*****************************
  13409. ******************************************
  13410.  
  13411. LINKSPACE:
  13412. ; ds.l 22500
  13413. ; incbin "ab3:includes/test.lnk"
  13414.  
  13415. LINKname:
  13416.  dc.b "TKG1:includes/test.lnk",0
  13417.  even
  13418.  
  13419. LINKFILE:
  13420.  dc.l LINKSPACE
  13421.  
  13422. ******************************************
  13423.  
  13424.  
  13425. ;brightentab:
  13426. ; incbin "brightenfile"
  13427. WorkSpace:
  13428.  ds.l 8192 
  13429. waterfile:
  13430.  incbin "waterfile"
  13431.  
  13432.  SECTION ffff,CODE_C
  13433.  
  13434. nullspr: dc.l 0
  13435.  
  13436.  cnop 0,8
  13437. ;borders:
  13438. ; incbin "newleftbord"
  13439. ; incbin "newrightbord"
  13440.  
  13441. health: 
  13442. ;incbin "healthstrip"
  13443. Ammunition: 
  13444. ;incbin "ammostrip"
  13445. healthpal: 
  13446. ;incbin "healthpal"
  13447. PanelKeys: 
  13448. ;incbin "greenkey"
  13449. ; incbin "redkey"
  13450. ; incbin "yellowkey"
  13451. ; incbin "bluekey"
  13452.  
  13453. null: ds.w 500
  13454. null2: ds.w 500
  13455. null3: ds.w 500
  13456. null4: ds.w 500
  13457.  
  13458.  
  13459. Blurbfield:
  13460.  
  13461.  dc.w bpl1ptl
  13462. bl1l: dc.w 0
  13463.  dc.w bpl1pth
  13464. bl1h: dc.w 0
  13465.  
  13466.  dc.w diwstart,$2c81
  13467.  dc.w diwstop,$1cc1
  13468.  dc.w ddfstart,$38
  13469.  dc.w ddfstop,$b8
  13470.  dc.w bplcon0,$9201
  13471.  dc.w bplcon1,0
  13472.  dc.w $106,$c40
  13473. blcols:
  13474.  dc.w col0,0
  13475.  dc.w col1,$fff
  13476.  
  13477.  dc.w $108,0
  13478.  dc.w $10a,0
  13479.  
  13480.  dc.w $ffff,$fffe
  13481.  dc.w $ffff,$fffe
  13482.  
  13483. nullline:
  13484.  ds.b 80    
  13485.  
  13486.  include "ab3:source_4000/titlecop.s"
  13487.  
  13488. bigfield:    
  13489.                 ; Start of our copper list.
  13490.  dc.w dmacon,$8020
  13491.  dc.w intreq,$8011
  13492.  dc.w $1fc,$f
  13493.  dc.w diwstart
  13494. winstart: dc.w $2c81
  13495.  dc.w diwstop
  13496. winstop: dc.w $2cc1
  13497.  dc.w ddfstart
  13498. fetchstart: dc.w $38
  13499.  dc.w ddfstop
  13500. fetchstop: dc.w $b8
  13501.  
  13502. bordercols:
  13503.  incbin "borderpal"
  13504.  
  13505.  dc.w spr0ptl
  13506. s0l:
  13507.  dc.w 0
  13508.  dc.w spr0pth
  13509. s0h:
  13510.  dc.w 0
  13511.  dc.w spr1ptl
  13512. s1l:
  13513.  dc.w 0
  13514.  dc.w spr1pth
  13515. s1h:
  13516.  dc.w 0
  13517.  dc.w spr2ptl
  13518. s2l:
  13519.  dc.w 0
  13520.  dc.w spr2pth
  13521. s2h:
  13522.  dc.w 0
  13523.  dc.w spr3ptl
  13524. s3l:
  13525.  dc.w 0
  13526.  dc.w spr3pth
  13527. s3h:
  13528.  dc.w 0
  13529.  dc.w spr4ptl
  13530. s4l:
  13531.  dc.w 0
  13532.  dc.w spr4pth
  13533. s4h:
  13534.  dc.w 0
  13535.  dc.w spr5ptl
  13536. s5l:
  13537.  dc.w 0
  13538.  dc.w spr5pth
  13539. s5h:
  13540.  dc.w 0
  13541.  dc.w spr6ptl
  13542. s6l:
  13543.  dc.w 0
  13544.  dc.w spr6pth
  13545. s6h:
  13546.  dc.w 0
  13547.  dc.w spr7ptl
  13548. s7l:
  13549.  dc.w 0
  13550.  dc.w spr7pth
  13551. s7h:
  13552.  dc.w 0
  13553.  
  13554. ; dc.w $106,$c42
  13555. ; incbin "borderpal"
  13556.  
  13557.  dc.w $106,$c42
  13558.  
  13559.  dc.w bplcon0,$0211
  13560.  dc.w bplcon1
  13561. smoff:
  13562.  dc.w $0
  13563.  
  13564.  dc.w $108
  13565. modulo: dc.w 0
  13566.  dc.w $10a,0
  13567.  
  13568.  dc.w $1001,$ff00
  13569.  dc.w intreq,$11
  13570.  
  13571. PALETTESPACE:
  13572.  dcb.l 528,$1fe0000
  13573.  
  13574.  dc.w $2001,$ff00
  13575.  
  13576.  dc.w bpl1pth
  13577. pl1h
  13578.  dc.w 0
  13579.  
  13580.  dc.w bpl1ptl
  13581. pl1l
  13582.  dc.w 0
  13583.  
  13584.  dc.w bpl2pth
  13585. pl2h
  13586.  dc.w 0
  13587.  
  13588.  dc.w bpl2ptl
  13589. pl2l
  13590.  dc.w 0
  13591.  
  13592.  dc.w bpl3pth
  13593. pl3h
  13594.  dc.w 0
  13595.  
  13596.  dc.w bpl3ptl
  13597. pl3l
  13598.  dc.w 0
  13599.  
  13600.  dc.w bpl4pth
  13601. pl4h
  13602.  dc.w 0
  13603.  
  13604.  dc.w bpl4ptl
  13605. pl4l
  13606.  dc.w 0
  13607.  
  13608.  dc.w bpl5pth
  13609. pl5h
  13610.  dc.w 0
  13611.  
  13612.  dc.w bpl5ptl
  13613. pl5l
  13614.  dc.w 0
  13615.  
  13616.  dc.w bpl6pth
  13617. pl6h
  13618.  dc.w 0
  13619.  
  13620.  dc.w bpl6ptl
  13621. pl6l
  13622.  dc.w 0
  13623.  
  13624.  dc.w bpl7pth
  13625. pl7h
  13626.  dc.w 0
  13627.  
  13628.  dc.w bpl7ptl
  13629. pl7l
  13630.  dc.w 0
  13631.  
  13632.  dc.w bpl8pth
  13633. pl8h
  13634.  dc.w 0
  13635.  
  13636.  dc.w bpl8ptl
  13637. pl8l
  13638.  dc.w 0
  13639.  
  13640.  
  13641. val SET $2c
  13642. SCRMODULOS:
  13643.  REPT 232
  13644.  dc.b val,1,$ff,$fe
  13645.  dc.w $108,0
  13646.  dc.w $10a,0
  13647.  dc.b val,$df,$ff,$fe
  13648. val SET (val+1)&$ff
  13649.  ENDR
  13650.  
  13651.  dc.w $108,0,$10a,0
  13652.  dc.w $2401,$ff00
  13653.  dc.w ddfstop,$c8
  13654.  dc.w bplcon0,$9201
  13655.  dc.w bpl1ptl
  13656. scroll:
  13657.  dc.w 0
  13658.  dc.w bpl1pth
  13659. scrolh:
  13660.  dc.w 0
  13661.  
  13662.  dc.w $106,$c40
  13663.  dc.w $180,0
  13664.  dc.w $182,$f0
  13665. ; dc.w $108,40
  13666. ; dc.w $10a,40
  13667.  
  13668. ; dc.w $80
  13669. ;JUMPBACKH:
  13670. ; dc.w 0
  13671. ; dc.w $82
  13672. ;JUMPBACKL:
  13673. ; dc.w 0
  13674.  
  13675. ; dc.w $8a,0
  13676.  
  13677.  dc.w $ffff,$fffe
  13678.  dc.w $ffff,$fffe
  13679.  
  13680. PALETTEBIT:
  13681.  incbin "256palette"
  13682.  dc.w $ffff,$fffe
  13683.  
  13684. yposcop:
  13685. ; dc.w $2a11,$fffe
  13686. ; dc.w $8a,0
  13687.  
  13688. ; ds.l 104*12
  13689.  
  13690. ;colbars:
  13691. ;val SET $2a
  13692. ; dcb.l 104*80,$1fe0000
  13693. ; dc.w $106,$c42
  13694. ; dc.w $80
  13695. ;pch1:
  13696. ; dc.w 0
  13697. ; dc.w $82
  13698. ;pcl1:
  13699. ; dc.w 0 
  13700. ; dc.w $88,0
  13701. ; dc.w $ffff,$fffe       ; End copper list.
  13702.  
  13703. ; ds.l 104*12
  13704.  
  13705.  
  13706. ;colbars2:
  13707. ;val SET $2a
  13708. ; dcb.l 104*80,$1fe0000
  13709. ; dc.w $106,$c42
  13710. ; dc.w $80
  13711. ;pch2:
  13712. ; dc.w 0
  13713. ; dc.w $82
  13714. ;pcl2:
  13715. ; dc.w 0
  13716. ; dc.w $88,0
  13717. ; dc.w $ffff,$fffe       ; End copper list.
  13718.  
  13719. ; ds.l 104*10
  13720.  
  13721. NullCopper:
  13722.  dc.w $ffff,$fffe
  13723.  
  13724. hitcol: dc.l 0
  13725.  
  13726. old: dc.l 0
  13727.  
  13728.  CNOP 0,64
  13729. SCROLLSCRN: ds.l 20*16
  13730.  
  13731. SCROLLOFFSET: dc.w 0
  13732. SCROLLTIMER: dc.w 100
  13733. SCROLLDIRECTION: dc.w 1
  13734. SCROLLXPOS: dc.w 0
  13735. SCROLLPOINTER: dc.l testscroll
  13736. ENDSCROLL: dc.l endtestscroll
  13737.  
  13738. testscroll:
  13739. ;      12345678901234567890123456789012345678901234567890123456789012345678901234567890
  13740. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13741. ; dc.b "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ                            "
  13742. ; dc.b "The Quick Brown Fox Jumped Over The Lazy Dog!                                   "
  13743.  
  13744. BLANKSCROLL:
  13745.  dc.b "                                                                                "
  13746. endtestscroll: 
  13747.  
  13748. prot5: dc.w 0
  13749. PanelCop:
  13750.  
  13751.  dc.w $80
  13752. och:
  13753.  dc.w 0
  13754.  dc.w $82
  13755. ocl:
  13756.  dc.w 0
  13757.  
  13758. statskip:
  13759.  dc.w $1fe,0
  13760.  dc.w $1fe,0
  13761.  
  13762.  dc.w $10c,0
  13763.  dc.w bplcon0,$1201
  13764.  dc.w bpl1ptl
  13765. n1l:
  13766.  dc.w 0
  13767.  dc.w bpl1pth
  13768. n1h:
  13769.  dc.w 0
  13770.  dc.w $108,-24
  13771. ; incbin "Panelpal"
  13772.  
  13773.  dc.w bpl2pth
  13774. p2h
  13775.  dc.w 0
  13776.  
  13777.  dc.w bpl2ptl
  13778. p2l
  13779.  dc.w 0
  13780.  
  13781.  dc.w bpl3pth
  13782. p3h
  13783.  dc.w 0
  13784.  
  13785.  dc.w bpl3ptl
  13786. p3l
  13787.  dc.w 0
  13788.  
  13789.  dc.w bpl4pth
  13790. p4h
  13791.  dc.w 0
  13792.  dc.w bpl4ptl
  13793. p4l
  13794.  dc.w 0
  13795.  dc.w bpl5pth
  13796. p5h
  13797.  dc.w 0
  13798.  dc.w bpl5ptl
  13799. p5l
  13800.  dc.w 0
  13801.  dc.w bpl6pth
  13802. p6h
  13803.  dc.w 0
  13804.  dc.w bpl6ptl
  13805. p6l
  13806.  dc.w 0
  13807.  dc.w bpl7pth
  13808. p7h
  13809.  dc.w 0
  13810.  dc.w bpl7ptl
  13811. p7l
  13812.  dc.w 0
  13813.  dc.w bpl8pth
  13814. p8h
  13815.  dc.w 0
  13816.  dc.w bpl8ptl
  13817. p8l
  13818.  dc.w 0
  13819.  
  13820.  
  13821.  dc.w ddfstart,$38
  13822.  dc.w ddfstop,$b8
  13823.  dc.w diwstart,$2c81
  13824.  dc.w diwstop,$2cc1
  13825.  
  13826.  dc.w bplcon0
  13827. Panelcon: dc.w $0211
  13828.  dc.w bpl1pth
  13829. p1h
  13830.  dc.w 0
  13831.  
  13832.  dc.w bpl1ptl
  13833. p1l
  13834.  dc.w 0
  13835.  
  13836.  
  13837.  dc.w $108,40*7
  13838.  dc.w $10a,40*7
  13839.  
  13840.  dc.w $ffff,$fffe
  13841.  
  13842.  dc.w $180,$fff
  13843.  
  13844.  
  13845.  dc.w $f801,$ff00
  13846.  dc.w col1,$50
  13847.  dc.w $f901,$ff00
  13848.  dc.w col1,$90
  13849.  dc.w $fa01,$ff00
  13850.  dc.w col1,$f0
  13851.  dc.w $fb01,$ff00
  13852.  dc.w col1,$f0
  13853.  dc.w $fc01,$ff00
  13854.  dc.w col1,$90
  13855.  dc.w $fd01,$ff00
  13856.  dc.w col1,$50
  13857.  
  13858.  dc.w $fe01,$ff00
  13859.  dc.w col1,$fff
  13860.  
  13861.  dc.w $ffdf,$fffe
  13862.  dc.w $a01,$ff00
  13863.  dc.w bplcon0,$201
  13864.  
  13865. ; incbin "faces2cols"
  13866.  dc.w bpl1pth
  13867. f1h
  13868.  dc.w 0
  13869.  
  13870.  dc.w bpl1ptl
  13871. f1l
  13872.  dc.w 0
  13873.  
  13874.  dc.w bpl2pth
  13875. f2h
  13876.  dc.w 0
  13877.  
  13878.  dc.w bpl2ptl
  13879. f2l
  13880.  dc.w 0
  13881.  
  13882.  dc.w bpl3pth
  13883. f3h
  13884.  dc.w 0
  13885.  
  13886.  dc.w bpl3ptl
  13887. f3l
  13888.  dc.w 0
  13889.  
  13890.  dc.w bpl4pth
  13891. f4h
  13892.  dc.w 0
  13893.  dc.w bpl4ptl
  13894. f4l
  13895.  dc.w 0
  13896.  
  13897.  dc.w bpl5pth
  13898. f5h
  13899.  dc.w 0
  13900.  dc.w bpl5ptl
  13901. f5l
  13902.  dc.w 0
  13903.  
  13904.  dc.w $0c01,$ff00
  13905.  dc.w bplcon0,$5201
  13906.   
  13907.  dc.w $ffff,$fffe
  13908.  
  13909.  cnop 0,64
  13910. FacePlace:
  13911. ; ds.l 6*32*5
  13912.  
  13913. TEXTSCRN: dc.l 0
  13914.  
  13915. TEXTCOP:
  13916.  dc.w intreq,$8030
  13917.  
  13918.  dc.w spr0ptl
  13919. txs0l:
  13920.  dc.w 0
  13921.  dc.w spr0pth
  13922. txs0h:
  13923.  dc.w 0
  13924.  dc.w spr1ptl
  13925. txs1l:
  13926.  dc.w 0
  13927.  dc.w spr1pth
  13928. txs1h:
  13929.  dc.w 0
  13930.  dc.w spr2ptl
  13931. txs2l:
  13932.  dc.w 0
  13933.  dc.w spr2pth
  13934. txs2h:
  13935.  dc.w 0
  13936.  dc.w spr3ptl
  13937. txs3l:
  13938.  dc.w 0
  13939.  dc.w spr3pth
  13940. txs3h:
  13941.  dc.w 0
  13942.  dc.w spr4ptl
  13943. txs4l:
  13944.  dc.w 0
  13945.  dc.w spr4pth
  13946. txs4h:
  13947.  dc.w 0
  13948.  dc.w spr5ptl
  13949. txs5l:
  13950.  dc.w 0
  13951.  dc.w spr5pth
  13952. txs5h:
  13953.  dc.w 0
  13954.  dc.w spr6ptl
  13955. txs6l:
  13956.  dc.w 0
  13957.  dc.w spr6pth
  13958. txs6h:
  13959.  dc.w 0
  13960.  dc.w spr7ptl
  13961. txs7l:
  13962.  dc.w 0
  13963.  dc.w spr7pth
  13964. txs7h:
  13965.  dc.w 0
  13966.  
  13967.  
  13968.  dc.w $10c,$0088
  13969.  
  13970.  dc.w $1fc,$f
  13971.  dc.w diwstart,$2c81    ; Top left corner of screen.
  13972.  dc.w diwstop
  13973. BOTOFTXT:
  13974.  dc.w $2cc1     ; Bottom right corner of screen.
  13975.  dc.w ddfstart,$38      ; Data fetch start.
  13976.  dc.w ddfstop,$c8       ; Data fetch stop.
  13977.  
  13978.  dc.w bplcon0
  13979. TSCP:
  13980.  dc.w $a201
  13981.  
  13982.  dc.w $106,$c40
  13983.  
  13984.  dc.w $2a01,$ff00
  13985.  
  13986.  dc.w col0,0
  13987.  dc.w col1
  13988. TOPLET:
  13989. TXTCOLL:
  13990.  dc.w 0
  13991.   dc.w col2
  13992. BOTLET:
  13993. TOPCOLL:
  13994.  dc.w 0
  13995.  dc.w col3
  13996. ALLTEXT:
  13997. MIXCOLL:
  13998.  dc.w $fff
  13999.  dc.w $106,$e40
  14000.  dc.w col3
  14001. ALLTEXTLOW:
  14002.  dc.w $0
  14003.  
  14004.  
  14005.  dc.w bpl1pth
  14006. TSPTh:
  14007.  dc.w 0
  14008.  dc.w bpl1ptl
  14009. TSPTl:
  14010.  dc.w 0
  14011.  
  14012.  dc.w bpl2pth
  14013. TSPTh2:
  14014.  dc.w 0
  14015.  dc.w bpl2ptl
  14016. TSPTl2:
  14017.  dc.w 0
  14018.  
  14019.  
  14020.  dc.w $108,0
  14021.  dc.w $10a,0
  14022.  
  14023.  dc.w $ffff,$fffe
  14024.  
  14025. ********************************************
  14026. * Stuff you don't have to worry about yet. *
  14027. ********************************************
  14028.  
  14029. closeeverything:
  14030.  
  14031. ; jsr mt_end
  14032.  
  14033.  move.l #nullcop,d0
  14034. ; move.l old,d0
  14035.  
  14036.  
  14037. ;charlie  
  14038.  move.l d0,$dff080     ; Restore old copper list.
  14039.  move.w d0,ocl
  14040.  swap d0
  14041.  move.w d0,och
  14042.  
  14043. ; move.l doslib,a6
  14044. ; move.l #4,d1
  14045. ; jsr -198(a6)
  14046.  
  14047. ; move.l doslib,d0
  14048. ; move.l d0,a1
  14049. ; move.l 4.w,a6
  14050. ; jsr CloseLib(a6)
  14051.  
  14052.  move.l #$dff000,a6
  14053.  move.w #$8020,dmacon(a6)
  14054.  move.w #$f,dmacon(a6)
  14055.  
  14056. ; move.l 4.w,a6
  14057. ; lea VBLANKInt,a1
  14058. ; moveq #INTB_COPER,d0
  14059. ; jsr _LVORemIntServer(a6)
  14060.  
  14061. ; IFEQ CD32VER
  14062. ; move.l OLDKINT,$68.w
  14063. ; ENDC
  14064. ; move.w saveinters,d0
  14065. ; or.w #$c000,d0
  14066. ; move.w d0,intena(a6)
  14067.  clr.w $dff0a8
  14068.  clr.w $dff0b8
  14069.  clr.w $dff0c8
  14070.  clr.w $dff0d8
  14071.  
  14072.  
  14073. ; move.l oldview,a1
  14074. ; move.l a1,d0
  14075. ; move.l gfxbase,a6
  14076. ; jsr -$de(a6)
  14077.  
  14078. ; cmp.b #'s',mors
  14079. ; beq.s leaveold
  14080. ; move.w #$f8e,$dff1dc
  14081. ;leaveold:
  14082.  
  14083.  jsr RELEASELEVELMEM
  14084.  jsr RELEASESCRNMEM
  14085.  
  14086.  move.l #0,d0
  14087.  
  14088.  rts
  14089.  
  14090.  
  14091.  
  14092. intbase: dc.l 0
  14093. gfxbase: dc.l 0
  14094. oldview: dc.l 0
  14095.  
  14096. stuff:
  14097.  
  14098.     PRSDL
  14099.     Lea    gfxname(pc),a1    
  14100.     Moveq.l    #0,d0
  14101.     Move.l    $4.w,a6    
  14102.     Jsr    -$228(a6)
  14103.     add.w d1,RVAL1
  14104.     Move.l     d0,gfxbase
  14105.     Move.l    d0,a6                Use As Base Reg
  14106.     Move.l    34(a6),oldview
  14107.     move.l 38(a6),old
  14108.     rts
  14109.  
  14110. gfxname dc.b "graphics.library",0
  14111.  even
  14112. INTUNAME    dc.b    "intuition.library",0
  14113.  
  14114.  even
  14115.  
  14116.  
  14117.  cnop 0,64
  14118.  
  14119. Panel:
  14120.  dc.l 0
  14121.  
  14122. TimerScr: 
  14123. ;ds.b 40*64
  14124.  
  14125. scrntab:
  14126.  ds.b 16
  14127. val SET 32
  14128.  REPT 96
  14129.  dc.b val,val,val
  14130. val SET val+1
  14131.  ENDR
  14132.  ds.b 16
  14133.  
  14134. smallscrntab:
  14135. val SET 32
  14136.  REPT 96
  14137.  dc.b val,val
  14138. val SET val+1
  14139.  ENDR
  14140.  
  14141.  cnop 0,64
  14142. scrn:
  14143.  dc.l 0
  14144. ; incbin "ab3:includes/newborderRAW"
  14145. ; ds.b 80
  14146. scrn2:
  14147.  dc.l 0
  14148.  
  14149. ;flib:
  14150. ; incbin "ab3:includes/newborderRAW"
  14151. ; ds.b 80
  14152. ;flib2:
  14153. ; incbin "ab3:includes/newborderRAW"
  14154. ; ds.b 80
  14155.  
  14156. ; incbin "ab3:includes/newborderRAW"
  14157. ; ds.b 80
  14158.  
  14159. SCRNDRAWPT: dc.l 0
  14160. SCRNSHOWPT: dc.l 0
  14161.  
  14162. ; dcb.l 8,$33333333
  14163. ; dc.l 0
  14164. ; dc.l 0
  14165. ; dcb.l 8,$0f0f0f0f
  14166. ; dc.l 0
  14167. ; dc.l 0
  14168. ;
  14169. ; dcb.l 8,$00ff00ff
  14170. ; dc.l 0
  14171. ; dc.l 0
  14172. ; dcb.l 8,$0000ffff
  14173. ; dc.l 0
  14174. ; dc.l 0
  14175. ; dc.l 0,-1,0,-1,0,-1,0,-1
  14176. ; dc.l 0
  14177. ; dc.l 0
  14178. ; dc.l -1,-1,0,0,-1,-1,0,0
  14179. ; dc.l 0
  14180. ; dc.l 0
  14181. ; dc.l 0,0,-1,-1,-1,-1,-1,-1
  14182. ; dc.l 0
  14183. ; dc.l 0
  14184.  
  14185. NumTimes: dc.l 0
  14186. TimeCount: dc.l 0
  14187. oldtime: dc.l 0
  14188. counting: dc.b 0
  14189. oktodisplay: dc.b 0
  14190.  
  14191. INITTIMER:
  14192.  move.l #0,TimeCount
  14193.  move.l #0,NumTimes
  14194.  rts
  14195.  
  14196. STARTCOUNT:
  14197.  move.l d0,-(a7)
  14198.  move.l $dff004,d0
  14199.  and.l #$1ffff,d0
  14200.  move.l d0,oldtime
  14201.  st counting
  14202.  move.l (a7)+,d0
  14203.  rts
  14204.  
  14205. STOPCOUNT:
  14206.  move.l d0,-(a7)
  14207.  move.l $dff004,d0
  14208.  and.l #$1ffff,d0
  14209.  
  14210.  sub.l oldtime,d0
  14211.  cmp.l #-256,d0
  14212.  bge.s okcount
  14213.  add.l #313*256,d0
  14214. okcount:
  14215.  add.l d0,TimeCount
  14216.  addq.l #1,NumTimes
  14217.  clr.b counting
  14218.  move.l (a7)+,d0
  14219.  rts
  14220.  
  14221. STOPCOUNTNOADD:
  14222.  move.l d0,-(a7)
  14223.  move.l $dff004,d0
  14224.  and.l #$1ffff,d0
  14225.  
  14226.  sub.l oldtime,d0
  14227.  cmp.l #-256,d0
  14228.  bge.s okcount2
  14229.  add.l #313*256,d0
  14230. okcount2:
  14231.  add.l d0,TimeCount
  14232.  clr.b counting
  14233.  move.l (a7)+,d0
  14234.  rts
  14235.  
  14236. maxbot: dc.w 0
  14237. tstneg: dc.l 0
  14238.  
  14239. STOPTIMER:
  14240.  st oktodisplay
  14241.  rts
  14242.  
  14243. digits: incbin "numbers.inc"
  14244.  
  14245. COMPACTMAP: ds.l 257
  14246.  
  14247. BIGMAP: ds.l 256*10
  14248.  
  14249.  Section Sounds,CODE_C
  14250.  
  14251. nullcop:
  14252.  dc.w $106,$c40
  14253.  dc.w $180,0 
  14254.  dc.w $100,$0
  14255.  dc.w $ffff,$fffe
  14256.  
  14257. Scream:
  14258. ; incbin "ab3:sounds/Scream"
  14259. ; ds.w 100
  14260. EndScream:
  14261. LowScream:
  14262. ; incbin "ab3:sounds/LowScream"
  14263. ; ds.w 100
  14264. EndLowScream:
  14265. BaddieGun:
  14266. ; incbin "ab3:sounds/BaddieGun"
  14267. EndBaddieGun:
  14268. bass:
  14269. ; incbin "ab3:sounds/backbass+drum"
  14270. bassend:
  14271. Shoot:
  14272. ; incbin "ab3:sounds/fire!"
  14273. EndShoot:
  14274. Munch:
  14275. ; incbin "ab3:sounds/munch"
  14276. EndMunch:
  14277. PooGun:
  14278. ; incbin "ab3:sounds/shoot.dm"
  14279. EndPooGun:
  14280. Collect:
  14281. ; incbin "ab3:sounds/collect"
  14282. EndCollect:
  14283. DoorNoise:
  14284. ; incbin "ab3:sounds/newdoor"
  14285. EndDoorNoise:
  14286. Stomp:
  14287. ; incbin "ab3:sounds/footstep3"
  14288. EndStomp:
  14289. SwitchNoise:
  14290. ; incbin "ab3:sounds/switch"
  14291. EndSwitch:
  14292. Reload:
  14293. ; incbin "ab3:sounds/switch1.SFX"
  14294. EndReload:
  14295.  
  14296. CHEATFRAME:
  14297.  dc.b 26,20,33,27,17,12
  14298. ENDCHEAT:
  14299.  
  14300. NoAmmo:
  14301. ; incbin "ab3:sounds/noammo"
  14302. EndNoAmmo:
  14303. Splotch:
  14304. ; incbin "ab3:sounds/splotch"
  14305. EndSplotch:
  14306. SplatPop:
  14307. ; incbin "ab3:sounds/splatpop"
  14308. EndSplatPop:
  14309. Boom:
  14310. ; incbin "ab3:sounds/boom"
  14311. EndBoom:
  14312. Hiss:
  14313. ; incbin "ab3:sounds/newhiss"
  14314. EndHiss:
  14315. Howl1:
  14316. ; incbin "ab3:sounds/howl1"
  14317. EndHowl1:
  14318. Howl2:
  14319. ; incbin "ab3:sounds/howl2"
  14320. EndHowl2:
  14321. Pant:
  14322. ; incbin "ab3:sounds/pant"
  14323. EndPant:
  14324. Whoosh:
  14325. ; incbin "ab3:sounds/whoosh"
  14326. EndWhoosh:
  14327. ROAR:
  14328. ; incbin "ab3:sounds/bigscream"
  14329. EndROAR
  14330. whoosh:
  14331. ; incbin "ab3:sounds/flame"
  14332. Endwhoosh:
  14333.  SECTION music,code_c
  14334.  
  14335. UseAllChannels: dc.w 0
  14336.  
  14337. mt_init:
  14338.     move.l    mt_data,a0
  14339.     move.l    a0,a1
  14340.     add.l    #$3b8,a1
  14341.     moveq    #$7f,d0
  14342.     moveq    #0,d1
  14343. mt_loop:move.l    d1,d2
  14344.     subq.w    #1,d0
  14345. mt_lop2:move.b    (a1)+,d1
  14346.     cmp.b    d2,d1
  14347.     bgt.s    mt_loop
  14348.     dbf    d0,mt_lop2
  14349.     addq.b    #1,d2
  14350.  
  14351.     lea    mt_samplestarts(pc),a1
  14352.     asl.l    #8,d2
  14353.     asl.l    #2,d2
  14354.     add.l    #$43c,d2
  14355.     add.l    a0,d2
  14356.     move.l    d2,a2
  14357.     moveq    #$1e,d0
  14358. mt_lop3:
  14359.     clr.l    (a2)
  14360.     move.l    a2,(a1)+
  14361.     moveq    #0,d1
  14362.     move.w    42(a0),d1
  14363.     asl.l    #1,d1
  14364.     add.l    d1,a2
  14365.     add.l    #$1e,a0
  14366.     dbf    d0,mt_lop3
  14367.  
  14368.     or.b    #$2,$bfe001
  14369.     move.b    #$6,mt_speed
  14370.     clr.w    $dff0a8
  14371.     clr.w    $dff0b8
  14372.     clr.w    $dff0c8
  14373.     clr.w    $dff0d8
  14374.     clr.b    mt_songpos
  14375.     clr.b    mt_counter
  14376.     clr.w    mt_pattpos
  14377.     rts
  14378.  
  14379. mt_end:    clr.w    $dff0a8
  14380.     clr.w    $dff0b8
  14381.     clr.w    $dff0c8
  14382.     clr.w    $dff0d8
  14383.     move.w    #$f,$dff096
  14384.     rts
  14385.  
  14386. mt_music:
  14387.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  14388.     move.l    mt_data,a0
  14389.     addq.b    #$1,mt_counter
  14390.     move.b    mt_counter,D0
  14391.     cmp.b    mt_speed,D0
  14392.     blt.s    mt_nonew
  14393.     clr.b    mt_counter
  14394.     bra    mt_getnew
  14395.  
  14396. mt_nonew:
  14397.     lea    mt_voice1(pc),a6
  14398.     lea    $dff0a0,a5
  14399.     bsr    mt_checkcom
  14400.     tst.b UseAllChannels
  14401.     beq mt_endr
  14402.     lea    mt_voice2(pc),a6
  14403.     lea    $dff0b0,a5
  14404.     bsr    mt_checkcom
  14405.      lea    mt_voice3(pc),a6
  14406.     lea    $dff0c0,a5
  14407.     bsr    mt_checkcom
  14408.     lea    mt_voice4(pc),a6
  14409.     lea    $dff0d0,a5
  14410.     bsr    mt_checkcom
  14411.     bra    mt_endr
  14412.  
  14413. mt_arpeggio:
  14414.     moveq    #0,d0
  14415.     move.b    mt_counter,d0
  14416.     divs    #$3,d0
  14417.     swap    d0
  14418.     cmp.w    #$0,d0
  14419.     beq.s    mt_arp2
  14420.     cmp.w    #$2,d0
  14421.     beq.s    mt_arp1
  14422.  
  14423.     moveq    #0,d0
  14424.     move.b    $3(a6),d0
  14425.     lsr.b    #4,d0
  14426.     bra.s    mt_arp3
  14427. mt_arp1:moveq    #0,d0
  14428.     move.b    $3(a6),d0
  14429.     and.b    #$f,d0
  14430.     bra.s    mt_arp3
  14431. mt_arp2:move.w    $10(a6),d2
  14432.     bra.s    mt_arp4
  14433. mt_arp3:asl.w    #1,d0
  14434.     moveq    #0,d1
  14435.     move.w    $10(a6),d1
  14436.     lea    mt_periods(pc),a0
  14437.     moveq    #$24,d7
  14438. mt_arploop:
  14439.     move.w    (a0,d0.w),d2
  14440.     cmp.w    (a0),d1
  14441.     bge.s    mt_arp4
  14442.     addq.l    #2,a0
  14443.     dbf    d7,mt_arploop
  14444.     rts
  14445. mt_arp4:move.w    d2,$6(a5)
  14446.     rts
  14447.  
  14448. mt_getnew:
  14449.     move.l    mt_data,a0
  14450.     move.l    a0,a3
  14451.     move.l    a0,a2
  14452.     add.l    #$c,a3
  14453.     add.l    #$3b8,a2
  14454.     add.l    #$43c,a0
  14455.  
  14456.     moveq    #0,d0
  14457.     move.l    d0,d1
  14458.     move.b    mt_songpos,d0
  14459.     move.b    (a2,d0.w),d1
  14460.     asl.l    #8,d1
  14461.     asl.l    #2,d1
  14462.     add.w    mt_pattpos,d1
  14463.     clr.w    mt_dmacon
  14464.  
  14465.     lea    $dff0a0,a5
  14466.     lea    mt_voice1(pc),a6
  14467.     bsr    mt_playvoice
  14468.     tst.b UseAllChannels
  14469.     beq mt_setdma
  14470.     lea    $dff0b0,a5
  14471.     lea    mt_voice2(pc),a6
  14472.     bsr    mt_playvoice
  14473.     lea    $dff0c0,a5
  14474.     lea    mt_voice3(pc),a6
  14475.     bsr    mt_playvoice
  14476.     lea    $dff0d0,a5
  14477.     lea    mt_voice4(pc),a6
  14478.     bsr    mt_playvoice
  14479.     bra    mt_setdma
  14480.  
  14481. PROTCALC:
  14482. ;    include "ab3:source_4000/protcalc.s"
  14483.     incbin "ab3:includes/protcalc.bin"
  14484. ENDPROTCALC:
  14485.  
  14486. mt_playvoice:
  14487.     move.l    (a0,d1.l),(a6)
  14488.     addq.l    #4,d1
  14489.     moveq    #0,d2
  14490.     move.b    $2(a6),d2
  14491.     and.b    #$f0,d2
  14492.     lsr.b    #4,d2
  14493.     move.b    (a6),d0
  14494.     and.b    #$f0,d0
  14495.     or.b    d0,d2
  14496.     tst.b    d2
  14497.     beq.s    mt_setregs
  14498.     moveq    #0,d3
  14499.     lea    mt_samplestarts(pc),a1
  14500.     move.l    d2,d4
  14501.     subq.l    #$1,d2
  14502.     asl.l    #2,d2
  14503.     mulu    #$1e,d4
  14504.     move.l    (a1,d2.l),$4(a6)
  14505.     move.w    (a3,d4.l),$8(a6)
  14506.     move.w    $2(a3,d4.l),$12(a6)
  14507.     move.w    $4(a3,d4.l),d3
  14508.     tst.w    d3
  14509.     beq.s    mt_noloop
  14510.     move.l    $4(a6),d2
  14511.     asl.w    #1,d3
  14512.     add.l    d3,d2
  14513.     move.l    d2,$a(a6)
  14514.     move.w    $4(a3,d4.l),d0
  14515.     add.w    $6(a3,d4.l),d0
  14516.     move.w    d0,8(a6)
  14517.     move.w    $6(a3,d4.l),$e(a6)
  14518.     move.w    $12(a6),d0
  14519.     move.w d0,$8(a5)
  14520.     bra.s    mt_setregs
  14521. mt_noloop:
  14522.     move.l    $4(a6),d2
  14523.     add.l    d3,d2
  14524.     move.l    d2,$a(a6)
  14525.     move.w    $6(a3,d4.l),$e(a6)
  14526.     move.w    $12(a6),d0
  14527.     move.w d0,$8(a5)
  14528. mt_setregs:
  14529.     move.w    (a6),d0
  14530.     and.w    #$fff,d0
  14531.     beq    mt_checkcom2
  14532.     move.b    $2(a6),d0
  14533.     and.b    #$F,d0
  14534.     cmp.b    #$3,d0
  14535.     bne.s    mt_setperiod
  14536.     bsr    mt_setmyport
  14537.     bra    mt_checkcom2
  14538. mt_setperiod:
  14539.     move.w    (a6),$10(a6)
  14540.     and.w    #$fff,$10(a6)
  14541.     move.w    $14(a6),d0
  14542.     move.w    d0,$dff096
  14543.     clr.b    $1b(a6)
  14544.  
  14545.     move.l    $4(a6),(a5)
  14546.     move.w    $8(a6),$4(a5)
  14547.     move.w    $10(a6),d0
  14548.     and.w    #$fff,d0
  14549.     move.w    d0,$6(a5)
  14550.     move.w    $14(a6),d0
  14551.     or.w    d0,mt_dmacon
  14552.     bra    mt_checkcom2
  14553.  
  14554. mt_setdma:
  14555.      move.w #250,d0
  14556. mt_wait:
  14557.      add.w #1,testchip
  14558.      dbra d0,mt_wait
  14559.     move.w    mt_dmacon,d0
  14560.     or.w    #$8000,d0
  14561.     tst.b UseAllChannels
  14562.     bne.s .splib
  14563.     and.w #%1111111111110001,d0
  14564. .splib
  14565.     move.w    d0,$dff096
  14566.     move.w #250,d0
  14567. mt_wait2:
  14568.     add.w #1,testchip
  14569.     dbra    d0,mt_wait2
  14570.     lea    $dff000,a5
  14571.     tst.b UseAllChannels
  14572.     beq.s noall
  14573.     lea    mt_voice4(pc),a6
  14574.     move.l    $a(a6),$d0(a5)
  14575.     move.w    $e(a6),$d4(a5)
  14576.     lea    mt_voice3(pc),a6
  14577.     move.l    $a(a6),$c0(a5)
  14578.     move.w    $e(a6),$c4(a5)
  14579.     lea    mt_voice2(pc),a6
  14580.     move.l    $a(a6),$b0(a5)
  14581.     move.w    $e(a6),$b4(a5)
  14582. noall:
  14583.     lea    mt_voice1(pc),a6
  14584.     move.l    $a(a6),$a0(a5)
  14585.     move.w    $e(a6),$a4(a5)
  14586.  
  14587.     add.w    #$10,mt_pattpos
  14588.     cmp.w    #$400,mt_pattpos
  14589.     bne.s    mt_endr
  14590. mt_nex:    clr.w    mt_pattpos
  14591.     clr.b    mt_break
  14592.     addq.b    #1,mt_songpos
  14593.     and.b    #$7f,mt_songpos
  14594.     move.b    mt_songpos,d1
  14595. ;    cmp.b    mt_data+$3b6,d1
  14596. ;    bne.s    mt_endr
  14597. ;    move.b    mt_data+$3b7,mt_songpos
  14598. mt_endr:tst.b    mt_break
  14599.     bne.s    mt_nex
  14600.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  14601.     rts
  14602.  
  14603. mt_setmyport:
  14604.     move.w    (a6),d2
  14605.     and.w    #$fff,d2
  14606.     move.w    d2,$18(a6)
  14607.     move.w    $10(a6),d0
  14608.     clr.b    $16(a6)
  14609.     cmp.w    d0,d2
  14610.     beq.s    mt_clrport
  14611.     bge.s    mt_rt
  14612.     move.b    #$1,$16(a6)
  14613.     rts
  14614. mt_clrport:
  14615.     clr.w    $18(a6)
  14616. mt_rt:    rts
  14617.  
  14618. CODESTORE: dc.l 0
  14619.  
  14620. mt_myport:
  14621.     move.b    $3(a6),d0
  14622.     beq.s    mt_myslide
  14623.     move.b    d0,$17(a6)
  14624.     clr.b    $3(a6)
  14625. mt_myslide:
  14626.     tst.w    $18(a6)
  14627.     beq.s    mt_rt
  14628.     moveq    #0,d0
  14629.     move.b    $17(a6),d0
  14630.     tst.b    $16(a6)
  14631.     bne.s    mt_mysub
  14632.     add.w    d0,$10(a6)
  14633.     move.w    $18(a6),d0
  14634.     cmp.w    $10(a6),d0
  14635.     bgt.s    mt_myok
  14636.     move.w    $18(a6),$10(a6)
  14637.     clr.w    $18(a6)
  14638. mt_myok:move.w    $10(a6),$6(a5)
  14639.     rts
  14640. mt_mysub:
  14641.     sub.w    d0,$10(a6)
  14642.     move.w    $18(a6),d0
  14643.     cmp.w    $10(a6),d0
  14644.     blt.s    mt_myok
  14645.     move.w    $18(a6),$10(a6)
  14646.     clr.w    $18(a6)
  14647.     move.w    $10(a6),$6(a5)
  14648.     rts
  14649.  
  14650. mt_vib:    move.b    $3(a6),d0
  14651.     beq.s    mt_vi
  14652.     move.b    d0,$1a(a6)
  14653.  
  14654. mt_vi:    move.b    $1b(a6),d0
  14655.     lea    mt_sin(pc),a4
  14656.     lsr.w    #$2,d0
  14657.     and.w    #$1f,d0
  14658.     moveq    #0,d2
  14659.     move.b    (a4,d0.w),d2
  14660.     move.b    $1a(a6),d0
  14661.     and.w    #$f,d0
  14662.     mulu    d0,d2
  14663.     lsr.w    #$6,d2
  14664.     move.w    $10(a6),d0
  14665.     tst.b    $1b(a6)
  14666.     bmi.s    mt_vibmin
  14667.     add.w    d2,d0
  14668.     bra.s    mt_vib2
  14669. mt_vibmin:
  14670.     sub.w    d2,d0
  14671. mt_vib2:move.w    d0,$6(a5)
  14672.     move.b    $1a(a6),d0
  14673.     lsr.w    #$2,d0
  14674.     and.w    #$3c,d0
  14675.     add.b    d0,$1b(a6)
  14676.     rts
  14677.  
  14678. mt_nop:    move.w    $10(a6),$6(a5)
  14679.     rts
  14680.  
  14681.  
  14682. mt_checkcom:
  14683.     move.w    $2(a6),d0
  14684.     and.w    #$fff,d0
  14685.     beq.s    mt_nop
  14686.     move.b    $2(a6),d0
  14687.     and.b    #$f,d0
  14688.     tst.b    d0
  14689.     beq    mt_arpeggio
  14690.     cmp.b    #$1,d0
  14691.     beq.s    mt_portup
  14692.     cmp.b    #$2,d0
  14693.     beq    mt_portdown
  14694.     cmp.b    #$3,d0
  14695.     beq    mt_myport
  14696.     cmp.b    #$4,d0
  14697.     beq    mt_vib
  14698.     move.w    $10(a6),$6(a5)
  14699.     cmp.b    #$a,d0
  14700.     beq.s    mt_volslide
  14701.     rts
  14702.  
  14703. mt_volslide:
  14704.     moveq    #0,d0
  14705.     move.b    $3(a6),d0
  14706.     lsr.b    #4,d0
  14707.     tst.b    d0
  14708.     beq.s    mt_voldown
  14709.     add.w    d0,$12(a6)
  14710.     cmp.w    #$40,$12(a6)
  14711.     bmi.s    mt_vol2
  14712.     move.w    #$40,$12(a6)
  14713. mt_vol2:move.w    $12(a6),d0
  14714.     asr.w #2,d0
  14715.     move.w d0,$8(a5)
  14716.     rts
  14717.  
  14718. mt_voldown:
  14719.     moveq    #0,d0
  14720.     move.b    $3(a6),d0
  14721.     and.b    #$f,d0
  14722.     sub.w    d0,$12(a6)
  14723.     bpl.s    mt_vol3
  14724.     clr.w    $12(a6)
  14725. mt_vol3:move.w    $12(a6),d0
  14726.     move.w d0,$8(a5)
  14727.     rts
  14728.  
  14729. mt_portup:
  14730.     moveq    #0,d0
  14731.     move.b    $3(a6),d0
  14732.     sub.w    d0,$10(a6)
  14733.     move.w    $10(a6),d0
  14734.     and.w    #$fff,d0
  14735.     cmp.w    #$71,d0
  14736.     bpl.s    mt_por2
  14737.     and.w    #$f000,$10(a6)
  14738.     or.w    #$71,$10(a6)
  14739. mt_por2:move.w    $10(a6),d0
  14740.     and.w    #$fff,d0
  14741.     move.w    d0,$6(a5)
  14742.     rts
  14743.  
  14744. mt_portdown:
  14745.     clr.w    d0
  14746.     move.b    $3(a6),d0
  14747.     add.w    d0,$10(a6)
  14748.     move.w    $10(a6),d0
  14749.     and.w    #$fff,d0
  14750.     cmp.w    #$358,d0
  14751.     bmi.s    mt_por3
  14752.     and.w    #$f000,$10(a6)
  14753.     or.w    #$358,$10(a6)
  14754. mt_por3:move.w    $10(a6),d0
  14755.     and.w    #$fff,d0
  14756.     move.w    d0,$6(a5)
  14757.     rts
  14758.  
  14759. mt_checkcom2:
  14760.     move.b    $2(a6),d0
  14761.     and.b    #$f,d0
  14762.     cmp.b    #$e,d0
  14763.     beq.s    mt_setfilt
  14764.     cmp.b    #$d,d0
  14765.     beq.s    mt_pattbreak
  14766.     cmp.b    #$b,d0
  14767.     beq.s    mt_posjmp
  14768.     cmp.b    #$c,d0
  14769.     beq.s    mt_setvol
  14770.     cmp.b    #$f,d0
  14771.     beq.s    mt_setspeed
  14772.     rts
  14773.  
  14774. mt_setfilt:
  14775.     move.b    $3(a6),d0
  14776.     and.b    #$1,d0
  14777.     asl.b    #$1,d0
  14778.     and.b    #$fd,$bfe001
  14779.     or.b    d0,$bfe001
  14780.     rts
  14781. mt_pattbreak:
  14782.     not.b    mt_break
  14783.     rts
  14784. mt_posjmp:
  14785.     st reachedend
  14786.     move.b    $3(a6),d0
  14787.     subq.b    #$1,d0
  14788.     move.b    d0,mt_songpos
  14789.     not.b    mt_break
  14790.     rts
  14791. mt_setvol:
  14792.     cmp.b    #$40,$3(a6)
  14793.     ble.s    mt_vol4
  14794.     move.b    #$40,$3(a6)
  14795. mt_vol4:move.b    $3(a6),d0
  14796.     move.w d0,$8(a5)
  14797.     rts
  14798. mt_setspeed:
  14799.     cmp.b    #$1f,$3(a6)
  14800.     ble.s    mt_sets
  14801.     move.b    #$1f,$3(a6)
  14802. mt_sets:move.b    $3(a6),d0
  14803.     beq.s    mt_rts2
  14804.     move.b    d0,mt_speed
  14805.     clr.b    mt_counter
  14806. mt_rts2:rts
  14807.  
  14808. mt_sin:
  14809.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  14810.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  14811.  
  14812. mt_periods:
  14813.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  14814.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  14815.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  14816.  DC.w $007f,$0078,$0071,$0000,$0000
  14817.  
  14818. reachedend: dc.b 0
  14819. mt_speed:    DC.b    6
  14820. mt_songpos:    DC.b    0
  14821. mt_pattpos:    DC.w    0
  14822. mt_counter:    DC.b    0
  14823.  
  14824. mt_break:    DC.b    0
  14825. mt_dmacon:    DC.w    0
  14826. mt_samplestarts:DS.L    $1f
  14827. mt_voice1:    DS.w    10
  14828.         DC.w    1
  14829.         DS.w    3
  14830. mt_voice2:    DS.w    10
  14831.         DC.w    2
  14832.         DS.w    3
  14833. mt_voice3:    DS.w    10
  14834.         DC.w    4
  14835.         DS.w    3
  14836. mt_voice4:    DS.w    10
  14837.         DC.w    8
  14838.         DS.w    3
  14839.  
  14840. CHEATPTR: dc.l 0
  14841. CHEATNUM: dc.l 0
  14842.  
  14843. testchip: dc.w 0
  14844.  
  14845. LEVELMUSIC: dc.l 0
  14846.  
  14847. ;/* End of File */
  14848. mt_data: dc.l 0
  14849. tstchip: dc.l 0
  14850.  include "SERIAL_NIGHTMARE"
  14851.  
  14852. ingame:
  14853. ; incbin "work:temp/newmusic/testonechan"
  14854. gameover: 
  14855. ;incbin "ab3:includes/gameover"
  14856. welldone: incbin "ab3:includes/newwelldone"
  14857.  
  14858.  
  14859.